Для работы в графическом режиме 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?