LINUX.ORG.RU

Косяк с запуском VNC через юнит

 ,


0

2

Не помогли мне прошлый раз www.linux.org.ru/forum/general/12736484 Задам снова вопрос на другой лад.
Нужно, чтобы запускался vnc-сервер x11vnc сразу после запуска lightdm, чтобы можно было логиниться по VNC либо просто подключаться к «рабочему столу» удалённо. Создал юнит /etc/systemd/system/x11vnc.service

[Unit]
Description=VNC-server x11vnc
After=lightdm.service

[Service]
Type=forking
ExecStart=/usr/bin/x11vnc -display :0 -rfbport 5900 -q

[Install]
WantedBy=graphical.target
И не работает. В journalctl пишет:
июл 20 15:33:18 adm-station x11vnc[566]: *** x11vnc was unable to open the X DISPLAY: ":0", it cannot continue.
Как будто x11vnc запускается раньше иксов. Что я сделал не так, я вроде After=lightdm.service указал?
Просто из командной строки при работающих иксах x11vnc запускается нормально

Просто из командной строки при работающих иксах x11vnc запускается нормально

а ты запусти его при работающем lightdm, когда еще никто не залогинился, увидишь что будет

anonymous ()

Буквы dm в lightdm обозначают Display Manager. Фраза «unable to open the X DISPLAY» означает, что ни одного Display ещё не создано. Создаёт Display ихний Manager. Ещё что-то непонятное осталось?

redgremlin ★★★★★ ()
Ответ на: комментарий от redgremlin

Буквы dm в lightdm обозначают Display Manager. Фраза «unable to open the X DISPLAY» означает, что ни одного Display ещё не создано. Создаёт Display ихний Manager. Ещё что-то непонятное осталось?

Э...
Иксы запускаются командой

xinit [ [ client ] options ... ] [ -- [ server ] [ display ] options ... ]
Команда эта запускается после активации юнита lightdm.service, хотя я в этом не уверен.
В качестве server - Xorg.
В качестве client - некий скрипт, запускающий lightdm, в этот момент на экране появляется окно логина.
Если запущен Xorg - значит Display создан.
Ну это по логике, хотя я могу заблуждаться.

Создаёт Display ихний Manager

Да, видимо заблуждаюсь. Но ведь все dm нужны для того, чтобы юзеру можно было логиниться в иксах?

Ещё что-то непонятное осталось?

Непонятно, что нужно поменять в юните, чтобы желаемое заработало

sunny1983 ★★★★ ()
Ответ на: комментарий от sunny1983

Иксы запускаются командой

Не только.

Команда эта запускается после активации юнита lightdm.service, хотя я в этом не уверен.

Не уверен — не обгоняй. Это не так. Между запуском lightdm и запуском первого X-сервера может пройти потенциально неограниченное количество времени.

Более того, тот X-сервер, который рисует greeter (окно приветствия и входа в систему), и тот X-сервер, в котором запускается пользовательское DE — две разные вещи, и номера дисплеев у них тоже будут разные.

Поэтому твой юнит вообще всё делает не так. Указывать After=lightdm.service бессмысленно. Указывать -display :0 — это хардкод. Вообще говоря, из systemd нет возможности подождать запуска пользовательского X-сервера, это разные сущности.

Тебе нужно запустить x11vnc из своего ~/.xinitrc (и удостовериться, что скрипт Xsession твоего DM читает и выполняет ~/.xinitrc).

intelfx ★★★★★ ()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Более того, тот X-сервер, который рисует greeter (окно приветствия и входа в систему), и тот X-сервер, в котором запускается пользовательское DE — две разные вещи, и номера дисплеев у них тоже будут разные.

То есть один X-сервер завершается, другой - запускается? Почему тогда экран не моргает?

Тебе нужно запустить x11vnc из своего ~/.xinitrc

~/.xinitrc выполняется после логина? То есть задачу логина по VNC это не решает.

sunny1983 ★★★★ ()
# /lib/systemd/system/x11vnc.service
[Unit]
Description="x11vnc"
Requires=display-manager.service
After=display-manager.service

[Service]
ExecStart=/usr/bin/x11vnc -xkb -noxrecord -noxfixes -noxdamage -auth guess  -dis
ExecStop=/usr/bin/killall x11vnc

[Install]
WantedBy=multi-user.target

вот мой

CHIPOK ★★★ ()
Ответ на: комментарий от CHIPOK

Этот вариант тоже не работает. Содержимое лога потом пришлю.
и я так и не понял как именно стартуют иксы из lightdm, куда нужно лезть чтобы исследовать данный процесс, и как решать исходную задачу с запуском VNC до логина.

sunny1983 ★★★★ ()