О принципах работы графической подсистемы GNU/Linux и удалённое подключение к ней

Настройка графического интерфейса, Иксов, десктопов, оконных менеджеров и иксовых терминалов

Модератор: Модераторы разделов

Аватара пользователя
sunny1983
Сообщения: 357
ОС: GNU/Linux 4.x (Fedora, Debian)

О принципах работы графической подсистемы GNU/Linux и удалённое подключение к ней

Сообщение sunny1983 »

Не до конца понимаю как работает графическая подсистема в GNU/Linux. Есть X-сервер и X-клиент, первый - то что взаимодействует с драйвером видеокарты и выводит изображение, второй - это сами GUI-приложения. Сервером может быть Xorg или его современные аналоги: Mir и Wayland, также некоторые VNC-сервера, такие как TigerVNC, также являются X-серверами.
Для работы в графическом режиме X-клиент нужно запускать одновременно с X-сервером, при отсутствии клиента X-сервер автоматически завершает свою работу. Для одновременного запуска используется утилита xinit. Если пользователь авторизовался в командной строке, то он запускает графическую подсистему командой startx, startx - это скрипт, в котором происходит подстановка переменных, в которых выбирается какой именно X-сервер и X-клиент запускать и с какими параметрами, у меня в конечном итоге выполняется команда:

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

xinit /usr/bin/startxfce4 :0 -- /usr/bin/Xorg :0

Xorg запускается от имени root, поскольку /usr/bin/Xorg имеет suid-бит, :0 - это номер дисплея, номер дисплея также передаётся через переменную DISPLAY, только я не очень понимаю что это, дисплей как-то связан с открытым tcp-портом или файлом сокета? И почему графическая подсистема запускается командой startx из локальной консоли, но отказывается запускаться из ssh-консоли?
Ещё одна задача, которую я не могу решить. Была задача, запускать VNC-сервер, чтобы потом удалённо к нему подключаться. Я запускал всё ту же DE XFCE, для чего подключался к серверу по ssh с пробросом tcp-порта 5900 на 127.0.0.1:5900, потом в окне ssh-терминала давал команду:

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

xinit /usr/bin/startxfce4 :0 -- /usr/bin/Xvnc :0 -geometry 800x600 -localhost -rfbport 5900 -SecurityTypes None

ну а после подключался VNC-клиентом к 127.0.0.1:5900. Что мне не удалось решить, так это автоматизировать этот процесс, чтобы TigerVNC запускался автоматически, и чтобы не нужно было держать открытым окно ssh-клиента, а пользоваться, например, клиентом remmina, который умеет открывать свои ssh-сессии.
Другой момент, который я не понимаю, это автоматический запуск графического окружения с помощью менеджера дисплеев, такого как xdm, gdm или lightdm. Как я понимаю из systemd-юнита вызывается всё тот же xinit, но в качестве клиента запускается менеджер дисплеев, в этом случае и сервер, и клиент запускаются от рута, потом, когда пользователь авторизовывается в графическом интерфейсе, запускается уже DE от имени пользователя. Правда где-то я слышал, что WM работает в одном X-сервере, а DE - в другом. Как в этом случае подключаться по VNC, чтобы можно было авторизовываться в окне VNC-клиента?
И ещё одна нерешаемая задача. ssh-сервер и клиент позволяют ведь и без VNC выводить окно GUI-приложения прямо на рабочем столе клиента с помощью опций X11Forwarding и ForwardX11. Что ещё для этого нужно? Какое значение должна принимать в этом случае переменная DISPLAY?
Спасибо сказали:
Аватара пользователя
zov
Сообщения: 255

Re: О принципах работы графической подсистемы GNU/Linux и удалённое подключение к ней

Сообщение zov »

sunny1983 писал(а):
31.12.2016 19:56
Для работы в графическом режиме X-клиент нужно запускать одновременно с X-сервером,

Нет, при запущенном X-сервере.
при отсутствии клиента X-сервер автоматически завершает свою работу.

Нет, просто ждет запросов от X-клиентов.
Для одновременного запуска используется утилита xinit.

Одновременный запуск нежелателен: к моменту первого запроса от X-клиента X-cервер должен быть готов принимать запросы.
Спасибо сказали:
Аватара пользователя
sunny1983
Сообщения: 357
ОС: GNU/Linux 4.x (Fedora, Debian)

Re: О принципах работы графической подсистемы GNU/Linux и удалённое подключение к ней

Сообщение sunny1983 »

Понятно!
Но как всё же сервер соединяется с клиентом? :0 не имеет ли какого отношения к файлу /tmp/.X11-unix/X0 ?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20843
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: О принципах работы графической подсистемы GNU/Linux и удалённое подключение к ней

Сообщение Bizdelnick »

Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
sunny1983
Сообщения: 357
ОС: GNU/Linux 4.x (Fedora, Debian)

Re: О принципах работы графической подсистемы GNU/Linux и удалённое подключение к ней

Сообщение sunny1983 »

Но для того чтобы в переменной DISPLAY можно было указать hostname:displaynumber.screennumber нужно же чтобы X-сервер слушал какие-то tcp-порты? А если он ничего не слушает?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20843
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: О принципах работы графической подсистемы GNU/Linux и удалённое подключение к ней

Сообщение Bizdelnick »

X servers listen for connections on a variety of different communications channels (network byte streams, shared memory, etc.). Since there can be more than one way of contacting a given server, The hostname part of the display name is used to determine the type of channel (also called a transport layer) to be used. X servers generally support the following types of connections:

localThe hostname part of the display name should be the empty string. For example: :0, :1, and :0.1. The most efficient local transport will be chosen.
TCPIPThe hostname part of the display name should be the server machine’s hostname or IP address. Full Internet names, abbreviated names, IPv4 addresses, and IPv6 addresses are all allowed. For example: x.org:0, expo:0, [::1]:0, 198.112.45.11:0, bigmachine:1, and hydra:0.1.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: