Olej писал(а):
... но на практике меня часто спрашивают коллеги, в общем, знающие эту теорию: "не получается!"
Вопрос: почему не получается то, что, в принципе, должно легко получаться?
На то есть 2 причины:
1. Х-сервер в нынешних навороченных дистрибутивах Linux (в отличии от родных для Х11 способов-команд: Xorg, xinit, startx...) запускается не непосредственно такой командной старта, а с помощью менеджеров оконных систем: xdm, gdm (GNOME), kdm (KDE) ... и прочей гадости
Они формируют команду запуска Xorg и к его параметрами приписывают: -nolisten tcp, что означает локальный UND (UNIX DOMAIN) сокет от клиента прослушивать, а TCP протокола сокет - нет.
Вы можете легко это у себя проверить:
Код: Выделить всё
[olej@notebook ~]$ ps ahx | grep Xorg
2045 tty1 Rs+ 8:40 /usr/bin/Xorg :0 -nr -verbose -auth /var/run/gdm/auth-for-gdm-06dQta/database -nolisten tcp vt1
9536 pts/5 S+ 0:00 grep Xorg
Когда-то раньше (лет 10 назад) один дурак это придумал и сказал: из соображений эффективности...
Когда оказалось, что это никак не влечёт эффективности, нынешние дистрибьюторостроители говорят: из соображений безопасности.
Но нет в том никакой безопасности! безопасность обеспечивается другими вовсе способами, а не тем, например, чтобы перерубить у компьютера LAN кабель
...
Если запускать Х-сервер так, как я выше запускал 2-й Х-сервер, простейшей командой:
- то этой проблемы у вас автоматически не будет.
А иначе вам нужно научить долбанный gdm запускать Хorg без вот того параметра-придатка: -nolisten tcp
2. эта причина связана уже действительно с безопасностью: Х-сервер готов принимать запросы (работать с Х-приложениями) только с хостов, с которых ему разрешено работать.
Их легко проверить:
Код: Выделить всё
[olej@notebook ~]$ xhost
access control enabled, only authorized clients can connect
SI:localuser:olej
SI:localuser:gdm
SI:localuser:root
Вот на этом компьютере Х-сервер будет принимать только некоторые локальные запросы (SI - Server Interpreted) и всё. У команды xhost нет help (это команда из комплекта X11), но есть man:
Код: Выделить всё
[olej@notebook ~]$ xhost
XHOST(1) XHOST(1)
NAME
xhost - server access control program for X
SYNOPSIS
xhost [[+-]name ...]
...
Полюбопытствуйте, что там есть name
... The name can be a host name or a user name. ...
Ну а для тех кому лень
, я приведу несколько примеров:
Код: Выделить всё
[olej@notebook ~]$ xhost +
access control disabled, clients can connect from any host
[olej@notebook ~]$ xhost -
access control enabled, only authorized clients can connect
- разрешить всем, а затем запретить всем кроме локальных.
Код: Выделить всё
[olej@notebook ~]$ xhost +192.168.1.22
192.168.1.22 being added to access control list
[olej@notebook ~]$ xhost +192.168.1.23
192.168.1.23 being added to access control list
[olej@notebook ~]$ xhost +192.168.1.24
192.168.1.24 being added to access control list
[olej@notebook ~]$ xhost
access control enabled, only authorized clients can connect
INET:192.168.1.24
INET:192.168.1.23
INET:notebook.localdomain
SI:localuser:olej
SI:localuser:gdm
SI:localuser:root
- видите как они добавляются?
точно так же они поштучно и удаляются.
А вот это уже совсем интересно ... правда?
:
Код: Выделить всё
[olej@notebook ~]$ DISPLAY=:3 xhost
access control enabled, only authorized clients can connect
INET:localhost.localdomain
INET:notebook.localdomain
INET6:notebook.localdomain
INET6:fe80::213:2ff:fe69:709b
LOCAL:
[olej@notebook ~]$ DISPLAY=:0 xhost
access control enabled, only authorized clients can connect
NIS:olej@0.0.0.0
NIS:root@192.168.1.0
INET:192.168.1.0
INET:192.168.1.24
INET:192.168.1.23
INET:notebook.localdomain
SI:localuser:olej
SI:localuser:gdm
SI:localuser:root
- это я, естественно, запустил 2-й Х-сервер с дисплеем :3 оконным менеджером twm (хотя думаю, что оконный менеджер здесь не при чём).
Как видно, доступ для разных Х-серверов
радикально различается!
И это тот
нечастый случай, когда действия -display и DISPALY= различаются, сравните:
Код: Выделить всё
[olej@notebook ~]$ DISPLAY=:3 xhost +192.168.1.9
192.168.1.9 being added to access control list
[olej@notebook ~]$ DISPLAY=:3 xhost
access control enabled, only authorized clients can connect
INET:nvidia.localdomain
INET:localhost.localdomain
INET:notebook.localdomain
INET6:notebook.localdomain
INET6:fe80::213:2ff:fe69:709b
LOCAL:
[olej@notebook ~]$ xhost -dispaly :3 +192.168.1.7
xhost: bad hostname "dispaly"
xhost: unknown address family ""
xhost: bad hostname ":3"
192.168.1.7 being added to access control list
- IP 192.168.1.7 добавился к списку допустимых хостов, но не сервера :3, а сервера :0 - это вдвойне не то, что я хотел получить.
Итого: у нас есть 2 препятствия для удалённого нативного Х11, 2-е я более-менее разрешил здесь, а с 1-м нужно разобраться особо.