Запустіть додаток на локальній машині та покажіть GUI на віддаленому дисплеї


35

Чи можливо запустити програму на моєму локальному робочому столі, але відобразити графічний інтерфейс на моєму ноутбуці (віддалений X)?

Мені цікаво, чи можна емулювати налаштування подвійного монітора за допомогою двох різних підключених до ланка машин.

У мене встановлена ​​синергія, і я можу легко керувати своїм ноутбуком за допомогою клавіатури / миші робочого столу, але я також хотів би просто запустити щось на робочому столі та відобразити графічний інтерфейс на екрані ноутбука.

Зі свого обмеженого досвіду роботи з X я знаю, що я можу запускати програму на віддаленій машині і використовувати дисплей першого, щоб показати вихід, але не навпаки.

Будь-які вказівники допоможуть вам. Дякую

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

Відповіді:


39

Варіант A - Зйомка X Windows на інший дисплей:

  1. Слідкуйте за тим, що Xserver на вашому ноутбуці починає прослуховувати з'єднання tcp. На жаль, X11-мережа відключена за замовчуванням у більшості дистрибутивів. Оскільки 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 (як правило, Socket Domain Socket) в локальний сокет TCP на віддаленій машині, після чого узгоджується печиво на дисплеї, а потім встановлюється середовище 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.

Варіант С - Оригінальна концепція тонкого набору:

Ви можете використовувати свій ноутбук, щоб відкрити сеанс робочого столу, який повністю працює на настільному комп’ютері.

  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-х + ... чи здійснилося передбачення Wayland?
Xen2050

19

Ви можете використовувати переадресацію ssh X для досягнення своєї мети. Якщо ви знаходитесь в одній підмережі, то це швидко вийти.

Встановіть ssh-сервер та клієнт на свій ноутбук та настільний ПК

sudo apt-get install ssh

Щоб підключитися до настільного ПК, відкрийте термінал на ноутбуці та введіть наступне

ssh -X username@desktop_pc_ip

І ви можете запустити будь-яке програмне забезпечення за допомогою терміналу, наприклад, запустивши Firefox, просто введіть firefoxтермінал.


2
Не забудьте переконатися, що для файлів конфігурації sshd (як правило, / etc / ssh / sshd_config) X11Forwarding встановлено також "так".
Матрікс Мол

Ось мій випадок використання: наприклад, я на своєму робочому столі і відкриваю Firefox, але хочу, щоб вікно браузера відкрилося на дисплеї мого ноутбука і все ще працювало на робочому столі. Я шукаю функціонал, подібний до робочих просторів, але замість локальної робочої області (4 екрани на одному ПК) використовувати віддалену робочу область (ноутбук)
Влад Бальмос

2
Також ви можете спробувати x2xпакет, ви можете використовувати одну клавіатуру та мишу в різних машинах. напр .:ssh -X user@host x2x -west -to :0
OHLÁLÁ

@iUngi Я вже використовую для цього синергію, все одно дякую
Влад Бальмос

Майте на увазі, що відкриваючи доступ до X-сервера робочого столу, ви надаєте досить широкий доступ до віддаленої машини. Якщо ваш сервер був порушений, це також може бути використане для переходу на ваш робочий стіл. Переадресація X11 корисна, але подумайте, що ви робите, і не включайте її за замовчуванням.
mc0e

7

Підготовка

(ви робите це лише один раз)

На робочому столі встановіть SSH-сервер

sudo apt-get install openssh-сервер


З вашого ноутбука:

ssh -X ім'я користувача @ desktop_pc_ip

У терміналі ви отримуєте те, що ви запускаєте, буде на робочому столі, але відображатиметься на вашому ноутбуці. Якщо ви хочете зробити те ж саме, сидячи на своєму робочому столі (і надсилаючи вікна на своєму ноутбуку), тоді продовжуйте.

На своєму терміналі ти працюєш

echo $ DISPLAY

Це покаже вам щось на кшталт:

localhost:10.0

З робочого столу:

Відкрийте термінал і запустіть

DISPLAY=:10.0 firefox

Це повинно надіслати firefoxвікно на вашому ноутбуці, але працює на робочому столі. Переконайтесь, що число, яке ви вводите (наприклад 10.0), збігається з echoрезультатом


3

Ви дивитесь на використання комбінації SSH та екрана, щоб отримати потрібну ситуацію.

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

sudo apt-get install screen

З цього моменту запустіть новий екранний сеанс:

екран

і відкрийте в ньому firefox:

firefox

Використовуйте Firefox все, що вам потрібно на робочому столі, а потім схудніть у свій комп’ютер зі свого ноутбука:

ssh -X ім'я користувача @ ім'я хоста

Введіть наступну команду, щоб побачити, які екранні сесії ви виконуєте:

екран -л

Увійдіть до свого екранного сеансу (1234 буде числом екрана, який вам дали)

екран -x 1234

Потім ви можете використовувати Firefox на своєму ноутбуці та закрити термінал на робочому столі.


спробував це. відкрив екран з терміналу, запустив Firefox на робочому столі, потім прошив з ноутбука на робочий стіл, приєднав сеанс екрана, але я не отримую жодного вікна на ноутбуці, лише вихід з запущеної програми на екрані.
Влад Бальмос

Ви це змішували. Зачекайте ... принаймні один з вас це зробив. Встановіть екран на настільний комп'ютер, використовуйте свій ноутбук на ssh -Xробочому столі, запустіть екран в сеансі ssh, від'єднайте його і залиште сеанс запущеним. Потім знову приєднайте сеанс екрану руками на настільному комп’ютері та щось запустіть. Це схоже на мою відповідь "SSH з поворотом". Використання екрана робить його трохи зручнішим.
Пол Ханш

3

Virtualgl створить додатковий (фоновий) робочий стіл (стиль TightVNC), до якого ви можете отримати доступ через турбо VNC-клієнта . Він буде функціонувати як угода на віддалений робочий стіл -> Але він буде відтворювати плавне відео по мережі.

Якщо ви шукаєте спосіб розвантажити накладні витрати процесора на віддалене з'єднання, щоб ви могли запускати додатки зі свого комп’ютера на своєму ноутбуці, то це було б саме я.

http://www.virtualgl.org/

Ви також можете експортувати робоче середовище через SSH як / dude, згадане вище.


Дякую. Виглядає перспективно. Я перегляну і повідомляю вас.
Влад Бальмос

Так, "TurboVNC" (більш того, його компонент VirtualGL) - це результат мого пошуку віддаленої настільної програми, яка дозволила б мені грати у відеоігри та фільми. Він легко функціонуватиме як додатковий монітор.
TardisGuy

1

Після ще одного копання в Інтернеті я натрапив на DMX

З домашньої сторінки

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


1
це буде кращою відповіддю, якщо ви можете дати інструкції, як встановити та як користуватися.
fossfreedom

XmetaX забезпечує подібні функції. Чи є альтернатива Xdmx та XmetaX?
Маріуш

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.