удалённый запуск графических X-приложений

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

Модераторы: Olej, adminn, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

удалённый запуск графических X-приложений

Непрочитанное сообщение Olej » 19 окт 2023, 13:53

Olej писал(а):
05 июл 2018, 21:47
X11 - сетевой протокол, а любые графические приложения Linux можно запускать на любом удалённом хосте не только в LAN, но, при большом желании и хорошей сети, и в глобальной сети
Эта тема требует заметного обновления:
- в связи с проверкой и адаптацией - что там в IPv6 ?
- из-за обновлений и изменений ... с 2018 года :lol:

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

удалённый запуск графических X-приложений

Непрочитанное сообщение Olej » 19 окт 2023, 14:08

Olej писал(а):
05 июл 2018, 21:59
Запуск диалоговой сессии SSH:

Код: Выделить всё

$ ssh -X user@192.168.1.200
...
Самый простой и быстрый, на сегодня, способ удалённого выполнения X-приложений - это использование туннеля SSH, запуск SSH-сессии с ключами -X и, ещё лучше, -Y (без TLS-шифрования трафика) ... (Это запуск от имени того же локального пользователя, без его указания.):

Код: Выделить всё

olej@R420:~$ hostname
R420

Код: Выделить всё

olej@R420:~$ ssh -Y 192.168.1.11
...

Или:

Код: Выделить всё

olej@R420:~$ ssh -Y olej@192.168.1.11
...

Или:

Код: Выделить всё

olej@R420:~$ ssh -Y -l olej 192.168.1.11
...

Или (с явным указанием и пароля - это для скриптов, см. SSH в скриптах: sshpass):

Код: Выделить всё

olej@R420:~$ sshpass -p zzzzzz ssh -Y olej@192.168.1.11
...
Это всё были синонимы одного и того же действия...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

удалённый запуск графических X-приложений

Непрочитанное сообщение Olej » 19 окт 2023, 14:17

Olej писал(а):
19 окт 2023, 14:08
это использование туннеля SSH, запуск SSH-сессии с ключами -X и, ещё лучше, -Y (без TLS-шифрования трафика)
Результат всех этих вариантов эквивалентен - мы на удалённом хосте, в его терминале:

Код: Выделить всё

olej@R420:~$ ssh -Y 192.168.1.11

Расширенное поддержание безопасности (ESM) для Applications выключено.

115 обновлений может быть применено немедленно.
86 из этих обновлений, являются стандартными обновлениями безопасности.
Чтобы просмотреть дополнительные обновления выполните: apt list --upgradable

Включите ESM Apps для получения дополнительных будущих обновлений безопасности.
Смотрите https://ubuntu.com/esm или выполните: sudo pro status

*** /dev/sda2 will be checked for errors at next reboot ***

Last login: Thu Oct 19 13:54:38 2023 from 192.168.1.14
Мы на удалённом хосте:

Код: Выделить всё

olej@nvidia:~$ hostname
nvidia

Код: Выделить всё

olej@nvidia:~$ ip -4 a s dev eno1
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    altname enp0s25
    inet 192.168.1.11/24 brd 192.168.1.255 scope global noprefixroute eno1
       valid_lft forever preferred_lft forever
Выбираем X11-приложение посложнее + запускаем его:

Код: Выделить всё

olej@nvidia:~$ which VirtualBox
/usr/bin/VirtualBox

olej@nvidia:~$ VirtualBox
...
Снимок экрана от 2023-10-19 13-56-04.png
Снимок экрана от 2023-10-19 13-56-04.png (115.47 КБ) 274 просмотра
И запускаем виртуальную машину операционной системы QNX 6.3 :-o :
Снимок экрана от 2023-10-19 13-57-23.png
Снимок экрана от 2023-10-19 13-57-23.png (53.24 КБ) 274 просмотра
Снимок экрана от 2023-10-19 13-58-29.png
Снимок экрана от 2023-10-19 13-58-29.png (274.32 КБ) 274 просмотра
По итогу, то что видим на картинках:
- совершенно чуждая ОС QNX 6.3 выполняется в VirtualBox на хосте nvidia ...
- а отображение, управление, ввод-вывод из QNX 6.3 идёт на экране хоста R420 ... совсем в другом конце, в данном случае LAN.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

удалённый запуск графических X-приложений

Непрочитанное сообщение Olej » 19 окт 2023, 16:05

Olej писал(а):
19 окт 2023, 13:53
- в связи с проверкой и адаптацией - что там в IPv6 ?
Есть у меня приятель, которому я обслуживаю по доброте душевной :-D компьютер, и установил там для этого IPv6 сеть Yggdrasil (Yggdrasil (2)):

Код: Выделить всё

olej@R420:~/Изображения$ ping -6c3 200:cd1f:5278:a6cf:31c5:3303:82c1:f1d3
PING 200:cd1f:5278:a6cf:31c5:3303:82c1:f1d3(200:cd1f:5278:a6cf:31c5:3303:82c1:f1d3) 56 data bytes
64 bytes from 200:cd1f:5278:a6cf:31c5:3303:82c1:f1d3: icmp_seq=1 ttl=64 time=193 ms
64 bytes from 200:cd1f:5278:a6cf:31c5:3303:82c1:f1d3: icmp_seq=2 ttl=64 time=78.1 ms
64 bytes from 200:cd1f:5278:a6cf:31c5:3303:82c1:f1d3: icmp_seq=3 ttl=64 time=78.7 ms

--- 200:cd1f:5278:a6cf:31c5:3303:82c1:f1d3 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 78.118/116.480/192.600/53.825 ms
Находится этот хост метрах в 500 от меня ... но: проключены мы в Интернет оптоволоконными GPON через разных провайдеров, так что трафик идёт через городские сети и роитеры провайдеров несколько десятков километров (что и по длительности ping видно!)...
Терминальная сессия SSH IPv6 с туннелированием X11:

Код: Выделить всё

olej@R420:~/Изображения$ ssh -6 -Y 200:cd1f:5278:a6cf:31c5:3303:82c1:f1d3
olej@200:cd1f:5278:a6cf:31c5:3303:82c1:f1d3's password:
Last login: Thu Oct 19 15:39:40 2023 from 21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f
И мы уже там :!: :

Код: Выделить всё

olej@Inspiron:~$ uname -a
Linux Inspiron 6.2.0-34-generic #34~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Sep  7 13:12:03 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
И чтоб не очень мудрить, выберу и запущу простейшее X11 приложение:

Код: Выделить всё

olej@Inspiron:~$ which xclock
/usr/bin/xclock

olej@Inspiron:~$ xclock
...
Изображение часиков на моём компьютере, за несколько десятков километров трафика :!:
Но захватить (скопировать) и сохранить его стандартными скриншотерами DE не получится, приложение не выполняется на хосте и в его оконной системе:

Код: Выделить всё

olej@R420:~/2023/PERSONAL/Kosha$ xlsclients | tail
R420  nm-applet
R420  mintUpdate.py
R420  tray.py
R420  Telegram
R420  xdg-desktop-portal-gtk
R420  firefox
R420  mate-terminal
R420  soffice
R420  kdeconnectd
Inspiron  xclock

Но картинка - рисуется :!: ("Ты видишь суслика? А он есть!" :lol: ).
А захватить её и сохранить можно командой из популярного пакета ImageMagic (которая выхватывает отмеченнкю область экрана):

Код: Выделить всё

olej@R420:~/2023/MY.LAN$ import kosha.png

olej@R420:~/2023/MY.LAN$ ls -l kosha.png
-rw-rw-r-- 1 olej olej 5907 окт 19 15:44 kosha.png
Вложения
kosha.png
kosha.png (6.97 КБ) 271 просмотр

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

удалённый запуск графических X-приложений

Непрочитанное сообщение Olej » 19 окт 2023, 18:56

Olej писал(а):
19 окт 2023, 14:08
Самый простой и быстрый, на сегодня, способ удалённого выполнения X-приложений - это использование туннеля SSH
Olej писал(а):
05 июл 2018, 21:47
а). использование естественных сетевых свойств протокола X11 и удалённого X-сервера
А вот это уже интереснее ... и куда сложнее...
Olej писал(а):
05 июл 2018, 21:47
P.S. Тема подробно и давно описана здесь: Разработка программных проектов в Linux:
Olej писал(а):
05 июл 2018, 22:51
Но как раз для этого, нативного, метода чаще всего говорят: "не работает, не работает"
Интереснее ... и куда сложнее... потому что:
1). по Интернет, как оказалось, множество обсуждений "как?" ... и многие их них, как оказалось, так и остаются без положительного решения... :-(
2). с 2018 года, когда я начинал писать эту тему, кое-что поменялось и в X11 ... точнее в его использовании :oops:
3). и то что я писал в конспекте "Разработка программных проектов в Linux" работает уже ... но с некоторой модификацией...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

удалённый запуск графических X-приложений

Непрочитанное сообщение Olej » 19 окт 2023, 19:04

Olej писал(а):
19 окт 2023, 18:56
использование естественных сетевых свойств протокола X11 и удалённого X-сервера
Проблемы то, собственно, всё те же и нужно решить:
Olej писал(а):
05 июл 2018, 22:51
1. Фаервол.
Olej писал(а):
05 июл 2018, 22:51
2. Запрет X-сервера (рисующего) на доступ:
Olej писал(а):
05 июл 2018, 22:51
3. Запрет X-серверу прослушивание протокола TCP/IP (обмен только через протокол нативного домена UNIX).

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

удалённый запуск графических X-приложений

Непрочитанное сообщение Olej » 19 окт 2023, 20:24

Olej писал(а):
19 окт 2023, 19:04
1. Фаервол.
С этим наиболее просто...
В качестве отрисовывающего X-сервера в экспериментах я буду использовать хост LAN:

Код: Выделить всё

olej@esprimop420:~$ hostname
esprimop420

Код: Выделить всё

olej@esprimop420:~$ ip -4 a s dev enp3s0
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    inet 192.168.1.138/24 brd 192.168.1.255 scope global dynamic noprefixroute enp3s0
       valid_lft 98295sec preferred_lft 98295sec
Смотрим на нём (но можно на любом хосте):

Код: Выделить всё

olej@esprimop420:/etc/lightdm$ cat /etc/services | grep -i X11
x11             6000/tcp        x11-0           # X Window System
x11-1           6001/tcp
x11-2           6002/tcp
x11-3           6003/tcp
x11-4           6004/tcp
x11-5           6005/tcp
x11-6           6006/tcp
x11-7           6007/tcp
Для сервера в Интернет с белым IP, там где работает файервол (файервол ufw, например), этот порт (6000/tcp) или порты - должны быть открыты.
В LAN, где для частных (серых) IPv4 файервол обычно не используется - можем этим не заморачиваться.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

удалённый запуск графических X-приложений

Непрочитанное сообщение Olej » 19 окт 2023, 21:29

Olej писал(а):
19 окт 2023, 19:04
3. Запрет X-серверу прослушивание протокола TCP/IP (обмен только через протокол нативного домена UNIX).
X11 пришёл в Linux уже в готовом виде из других UNIX. В современных дистрибутивах принято запускать X-сервер так, чтобы он не прослушивал TCP соединения:

Код: Выделить всё

olej@esprimop420:~$ ps ahx | grep Xorg
    989 tty7     Rsl+ 26947:45 /usr/lib/xorg/Xorg :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
  68920 pts/0    S+     0:00 grep Xorg
Olej писал(а):
05 июл 2018, 22:51
Вам нужно добиться запуска Xorg типа какого-то такого (без -nolisten tcp):
Но ...
Olej писал(а):
05 июл 2018, 22:51
чаще всего говорят: "не работает, не работает"
Способ который массово описывают по Интернет (в более ранних публикациях), перпеписать файл:

Код: Выделить всё

olej@esprimop420:~$ cat /etc/X11/xinit/xserverrc
#!/bin/sh

exec /usr/bin/X -nolisten tcp "$@"
Это не работает :!:

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

удалённый запуск графических X-приложений

Непрочитанное сообщение Olej » 19 окт 2023, 21:36

Olej писал(а):
19 окт 2023, 21:29
Это не работает
Это не работает сейчас потому, что никто сейчас не запускает X-сервер вручную (через xinit или startx), а делается это чере DM (Display Manager), который делает нам GUI логин и запускает X-сервер.
Сейчас в дистрибутивах используются чаще всего lightdm (иногда mdm и др.).

Код: Выделить всё

olej@esprimop420:~$ ps -A | grep lightdm
    892 ?        00:00:00 lightdm
   1049 ?        00:00:00 lightdm
Для lightdm его конфиг файл:

Код: Выделить всё

olej@esprimop420:/etc/lightdm$ grep -v ^#  /etc/lightdm/lightdm.conf.0 | grep -v ^$
[Seat:*]
[LightDM]
[Seat:*]
greeter-session=lightdm-gtk-greeter
user-session=cinnamon
autologin-user=olej
[XDMCPServer]
[VNCServer]
Дописываю туда 2 строчки:

Код: Выделить всё

olej@esprimop420:/etc/lightdm$ grep -v ^#  /etc/lightdm/lightdm.conf | grep -v ^$
[Seat:*]
[LightDM]
[Seat:*]
xserver-allow-tcp=true
xserver-command=X -listen tcp
greeter-session=lightdm-gtk-greeter
user-session=cinnamon
autologin-user=olej
[XDMCPServer]
[VNCServer]
После перезапуска:

Код: Выделить всё

olej@esprimop420:/etc/lightdm$ ps ahx | grep Xorg
    997 tty7     Ssl+   0:47 /usr/lib/xorg/Xorg -listen tcp :0 -seat seat0 -auth /var/run/lightdm/root/:0 -listen tcp vt7 -novtswitch
   3735 pts/9    S+     0:00 grep Xorg
И:

Код: Выделить всё

olej@esprimop420:/etc/lightdm$ sudo netstat -tunlp | grep X
tcp        0      0 0.0.0.0:6000            0.0.0.0:*               LISTEN      997/Xorg
tcp6       0      0 :::6000                 :::*                    LISTEN      997/Xorg
X-сервер прослушивает порт 6000 (обращаем внимание на будущее - и в IPv4 и в IPv6).

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

удалённый запуск графических X-приложений

Непрочитанное сообщение Olej » 19 окт 2023, 21:40

Теперь с другого (клиентского) хоста пытаемся удалённый запуск:

Код: Выделить всё

olej@R420:~$ xclock -display 192.168.1.138:0
Authorization required, but no authorization protocol specified
Error: Can't open display: 192.168.1.138:0
Получаем облом :oops:
И это 3-й пункт нашего джентльменского набора:
Olej писал(а):
05 июл 2018, 22:51
2. Запрет X-сервера (рисующего) на доступ:
Который предстоит решить.

Ответить

Вернуться в «Графические окружения в дистрибутивах»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей