Запустите приложение на локальном компьютере и покажите графический интерфейс на удаленном дисплее.

35

Можно ли запустить приложение на моем локальном рабочем столе, но отобразить графический интерфейс на моем ноутбуке (удаленный X)?

Мне интересно, можно ли эмулировать настройку с двумя мониторами, используя 2 разных компьютера, подключенных к локальной сети.

Я установил синергию, и я могу легко управлять своим ноутбуком с помощью клавиатуры / мыши на рабочем столе, но я также хотел бы просто запустить что-то на рабочем столе и отобразить графический интерфейс на экране ноутбука.

Из моего ограниченного опыта работы с X я знаю, что могу запустить программу на удаленном компьютере и использовать отображение первого, чтобы показать результат, но не наоборот.

Любые указатели будут очень полезны. Спасибо

PS Запуск XFCE 4.10 на Ubuntu 12.10

Влад Балмос
источник

Ответы:

39

Вариант A - Съемка X Windows на другой дисплей:

  1. Следите за тем, чтобы сервер Xserver на вашем ноутбуке запускал прослушивание tcp-соединений. К сожалению, X11-Networking по умолчанию отключен в большинстве дистрибутивов. Поскольку Xserver запускается вашим диспетчером отображения (gdm, lightdm), его необходимо настроить там:

    Какой бы менеджер дисплеев вы не использовали, какой-то файл конфигурации в / etc /, вероятно, будет содержать ответственный параметр XServer. Запустите grep -r 'nolisten tcp' /etc/на своем ноутбуке, чтобы узнать, какой конфигурационный файл отвечает, и удалите часть, в которой он говорит -nolisten tcp(не всю строку, а только этот параметр). Перезагрузите X на своем ноутбуке.

    Теперь ваш ноутбук должен иметь дисплей, работающий по tcp порту 6000 (попробуйте запустить его nmap -p6000 Laptopна настольном ПК, если порт был отмечен как «открытый», вы зашли так далеко).

  2. Сделайте ваш X-дисплей доступным для настольного компьютера. X11 использует механизм аутентификации для предоставления доступа к дисплею. Вы должны позволить настольному ПК снимать Windows на ноутбук. Обычно путем обмена отображаемым cookie.

    Для начала выполните этот шаг, положив руки на ноутбук. Как только вы получили понятие с DISPLAYпеременной и всем остальным, вы можете сделать это через ssh.

    Быстро и грязно: вы можете запустить xhost +desktops.computers.ip.addressна своем ноутбуке, чтобы предоставить X доступ к настольному компьютеру. Обратите внимание, что каждый пользователь вашего ноутбука может использовать ваш ноутбук X таким образом. Обратите внимание, что этого достаточно, например, для установки кейлоггера на дисплей вашего ноутбука. Используйте этот метод только для тестирования.

    Правильно и безопасно: запустите xauth extract cookie-file :0на своем ноутбуке, чтобы экспортировать секрет доступа к дисплею в «cookie-файл». Перенесите файл cookie на свой компьютер. Беги xauth merge cookie-file. Или за один короткий шаг (с вашего рабочего стола) ssh Laptop xauth extract - :0 |xauth merge -Примечание: если ваш ноутбук и рабочий стол используют общий каталог, то есть через nfs, вам не нужно обмениваться никакими учетными данными. База данных учетных данных - это файл .Xauthority в вашем домашнем каталоге, и его можно использовать для разных компьютеров.

  3. Запустите программу: в терминале на вашем настольном ПК export DISPLAY=Your.Laptops.IP.Address:0запустите любую программу X в том же терминале. Он должен появиться на дисплее ноутбука.

Вариант Б - Использование SSH с поворотом.

SSH выполняет пересылку X11 путем переадресации в локальный сокет X11 (обычно Unix Domain Socket) в локальный TCP-сокет на удаленном компьютере, затем согласовывает файл cookie отображения, затем устанавливает DISPLAY-Environment на удаленном компьютере. Таким образом весь трафик X11 шифруется по туннелю ssh. Обычный вариант использования - пересылка локального дисплея на удаленный компьютер (это означает, что удаленные приложения могут отображать x windows локально).

Преимущество использования ssh состоит в том, что вам не нужно переводить ваш X-сервер в режим прослушивания tcp (так как используется сокет unix). И SSH обрабатывает обмен учетными данными.

  1. SSH к вашему ноутбуку с вашего настольного компьютера (вам пока не нужно использовать -X).
  2. В удаленной оболочке введите, export DISPLAY=:0что делает уже работающий дисплей на вашем ноутбуке доступным для оболочки, которую вы получили через ssh. Если вы сейчас выполните какую-либо X-команду, она уже появится на экране вашего ноутбука, но все равно будет работать на вашем ноутбуке (попробуйте на всякий случай)
  3. Из этой оболочки ssh обратно на настольный компьютер используйте -X на этот раз. Теперь у вас есть оболочка на компьютере, на котором был создан сеанс ssh, но на этот раз с работающим X. Запустите xeyes или xcalc, чтобы протестировать его.
  4. echo $DISPLAYпоказывает обозначение, которое теперь у вашего ноутбука X на настольном компьютере. То есть: 10 или: 11.
  5. Вы можете свернуть терминал сейчас. Каждый раз, когда вы вводите export DISPLAY=:10(смотрите, какой у вас номер дисплея) на своем настольном компьютере сейчас, каждая программа, которую вы запускаете впоследствии в той же оболочке, будет отображаться на экране вашего ноутбука.

    Этот вариант простой, но медленный, поскольку весь трафик X11 пересылается через SSH.

Вариант C - оригинальная концепция thinclient:

Вы можете использовать свой ноутбук, чтобы открыть сеанс рабочего стола, работающий полностью на вашем компьютере.

  1. Настройте диспетчер отображения на рабочем столе для ответа на трансляции XDMCP. Как это сделать, зависит от вашего диспетчера отображения. Некоторые менеджеры дисплеев вообще не поддерживают это, то есть тонкие. XDM, KDM, WDM, GDM поддерживают это.

  2. Запустите X-сервер на своем ноутбуке, который запрашивает диспетчер отображения с вашего рабочего стола. Либо вложенный X: Xephyr :1 -query desktopили Xephyr :1 -broadcast Или, выключив X-сервер вашего ноутбука и войдите в системный терминалsudo Xorg :0 -broadcast

    Диспетчер дисплея позаботится о том, чтобы учетные данные генерировались, обменивались и все. Поздравляем, теперь вы должны увидеть окно входа в систему, предоставляемое вашим настольным компьютером.

Пол Хенш
источник
2
КСТАТИ. Вся эта замечательная функциональность X11 просто перестанет работать, как только Ubuntu переключится на Wayland. Приложения NAtive Wayland даже не могут пересылаться через ssh.
Пол Хэнш
6
Разве не иронично, что нет графического набора инструментов для управления вашим X-сервером? Если вы действительно хотите работать с графическим интерфейсом, сначала вы должны доминировать в командной строке.
Пол Хэнш
Общий совет: первая программа, которую вы можете запустить на удаленном дисплее, - это запуск приложения. Т.е. lxpanel или что-то. Это экономит много командной строки.
Пол Хэнш
Это все еще работает для Ubuntu 17 + ... или предсказание Уэйленда сбылось?
Xen2050
19

Вы можете использовать ssh X forwarding для достижения своей цели. Если вы находитесь в той же подсети, то она быстро завершается.

Установите ssh сервер и клиент на свой ноутбук и настольный ПК

sudo apt-get install ssh

Чтобы подключиться к настольному ПК, откройте терминал на ноутбуке и введите следующее

ssh -X username@desktop_pc_ip

И вы можете запустить любое программное обеспечение с помощью терминала, например, запустив Firefox, просто набрав firefoxв терминале.

О-ЛЯ-ЛЯ
источник
2
Не забудьте проверить, что для файлов конфигурации sshd (обычно / etc / ssh / sshd_config) для X11Forwarding также установлено значение yes.
Матрица Крот
Вот мой пример использования: я нахожусь на своем рабочем столе и, например, открываю Firefox, но я хочу, чтобы окно браузера открывалось на дисплее моего ноутбука и все еще работало на моем рабочем столе. Я ищу функциональность, аналогичную рабочим областям, но вместо локального рабочего пространства (4 экрана на одном компьютере) для использования удаленного рабочего пространства (ноутбука)
Влад Бальмос
2
Также вы можете попробовать x2xпакет, вы можете использовать одну клавиатуру и мышь на другой машине. напр .:ssh -X user@host x2x -west -to :0
ОХАЛА
@iUngi Я уже использую синергию для этого, все равно спасибо
Влад Балмос
Имейте в виду, что, открывая доступ к X-серверу вашего рабочего стола, вы предоставляете достаточно широкий доступ к удаленной машине. Если ваш сервер был скомпрометирован, это также может быть использовано для входа на ваш рабочий стол. Пересылка X11 полезна, но подумайте о том, что вы делаете, и не включайте ее по умолчанию.
mc0e
7

подготовка

(вы делаете это только один раз)

На вашем рабочем столе установите SSH сервер

sudo apt-get установить openssh-сервер


С вашего ноутбука:

ssh -X username @ desktop_pc_ip

В терминале вы получаете все, что вы запускаете, будет на вашем рабочем столе, но отображается на вашем ноутбуке. Если вы хотите сделать то же самое, сидя на рабочем столе (и отправить окна на своем ноутбуке), то продолжайте.

На вашем терминале вы запускаете

echo $ DISPLAY

Это покажет вам что-то вроде:

localhost:10.0

С вашего рабочего стола:

Откройте терминал и запустите

DISPLAY=:10.0 firefox

Это должно отправить firefoxокно на вашем ноутбуке, но работает на вашем рабочем столе. Убедитесь, что число, которое вы указали (например 10.0), совпадает с echoрезультатом

Ник Андрик
источник
3

Вы хотите использовать комбинацию SSH и экрана, чтобы получить нужную вам ситуацию.

На рабочем столе установите экран:

sudo apt-get установочный экран

Оттуда запустите новый сеанс экрана:

экран

и откройте в нем firefox:

Fire Fox

Используйте Firefox все, что вы хотите на своем рабочем столе, а затем SSH на свой компьютер с вашего ноутбука:

ssh -X username @ hostname

Введите следующую команду, чтобы увидеть, какие сеансы экрана у вас запущены:

скрин-ллы

Войдите в свой сеанс экрана (1234 будет номером экрана, который дал вам -ls)

screen -x 1234

Затем вы можете использовать Firefox на своем ноутбуке и закрыть терминал на рабочем столе.

user530873
источник
попробовал это. открыл экран из терминала, запустил firefox на рабочем столе, затем перешел с ноутбука на рабочий стол, прикрепил сеанс экрана, но у меня нет окна на ноутбуке, только вывод работающей программы на экране.
Влад Балмос
Вы смешивали это. Подождите ... по крайней мере, один из вас сделал. Установите экран на настольном компьютере, используйте ноутбук на ssh -Xрабочем столе, запустите экран в сеансе ssh, отсоедините его и оставьте сеанс запущенным. Затем снова присоедините экранный сеанс к компьютеру и запустите что-нибудь. Это похоже на мой ответ "SSH с изюминкой". Использование экрана делает его немного более удобным.
Paul Hänsch
3

Virtualgl создаст дополнительный (фоновый) рабочий стол (стиль TightVNC), к которому вы можете получить доступ через клиент Turbo VNC . Он будет функционировать как сделка типа удаленного рабочего стола -> Но он будет воспроизводить плавное видео по сети.

Если вы ищете способ снять нагрузку с ЦП для удаленного соединения, чтобы вы могли запускать приложения со своего компьютера на своем ноутбуке, то это было бы то, что я бы сделал.

http://www.virtualgl.org/

Вы также можете экспортировать среду рабочего стола через SSH как / dude выше.

TardisGuy
источник
Спасибо. Выглядит многообещающе. Я посмотрю и буду держать вас в курсе.
Влад Балмос
Да, «TurboVNC» (более того, его компонент VirtualGL) является результатом моего поиска программы для удаленного рабочего стола, которая позволила бы мне играть в видеоигры и фильмы. Это будет легко функционировать как дополнительный монитор.
TardisGuy
1

После еще нескольких копаний в интернете я наткнулся на DMX

С домашней страницы

Xdmx - это прокси-сервер X, который обеспечивает поддержку нескольких головок для нескольких дисплеев, подключенных к разным машинам (на каждом из которых работает типичный X-сервер). Когда Xinerama используется с Xdmx, несколько дисплеев на нескольких машинах представляются пользователю как единый унифицированный экран.

Влад Балмос
источник
1
это было бы лучшим ответом, если бы вы могли дать инструкции, как установить и как использовать.
fossfreedom
XmetaX обеспечивает аналогичные функции. Есть ли альтернатива Xdmx и XmetaX?
Mariusz
1

Да, это возможно. Я беру оба компьютера Linux с установленным xclock на локальном компьютере. Я пытаюсь запустить xclock локально и показать часы на удаленном компьютере с Linux.

reboot the remote machine
Disable firewall
Disable SELINUX
Check $DISPLAY variable value by command
echo $DISPLAY
Let say its value is :1
run command
xhost +

Now on local computer
xclock -display remote_machine_IP_address:1
Миан Асбат Ахмад
источник