Я хотел бы настроить активацию системного сокета для x11vnc на сервере, но я не получаю надлежащую конфигурацию для удовлетворения моих требований.
Я бы хотел:
- Откройте новое соединение VNC с сервером через стандартный порт (5900). Активация сокета должна запустить x11vnc на работающем в данный момент X-сервере.
- Иметь возможность подключить второго клиента к одному и тому же серверу vnc, чтобы они оба могли видеть один и тот же экран.
- Когда последний клиент отключается,
x11vnc
должен быть остановлен. - Новое клиентское соединение перезапускает
x11vnc
если оно не запущено.
Systemd находится на 225 и x11vnc на 0.9.13.
Кажется, я не могу использовать простую комбинацию файлов x11vnc.socket
+x11vnc.service
потому что x11vnc
будет сопоставлен со следующим портом TCP (5901), если обнаружит, что стандартный порт (5900) уже используется (сокетом systemd).
Поэтому я использую "прокси" systemd (см. Https://www.freedesktop.org/software/systemd/man/systemd-socket-proxyd.html), чтобы systemd прослушивал 5900 и x11vnc на 5901. Так что я:
proxy-to-x11vnc.socket:
[Socket]
ListenStream=5900
[Install]
WantedBy=sockets.target
proxy-to-x11vnc.service:
[Unit]
Description=x11vnc
Requires=x11vnc.service
After=x11vnc.service
[Service]
User=myuser
ExecStart=/lib/systemd/systemd-socket-proxyd 127.0.0.1:5901
x11vnc.service:
[Unit]
Description=x11vnc
[Service]
User=myuser
StandardError=syslog
ExecStart=/usr/bin/x11vnc -auth /home/myuser/.Xauthority -shared -display :0 -rfbport 5901 -noipv6
Только proxy-to-x11vnc.socket запускается / включается.
Проблема с этой настройкой:
- При первом клиентском подключении я вижу, что x11vnc запускается и прослушивает правильный порт, но клиентское соединение просто "зависает". Просматривая логи сервера
x11vnc
не получает попытку подключения. - Уничтожение клиента и повторное подключение успешно показывают удаленный дисплей.
- Отключение клиента приведет к прекращению работы
x11vnc
, но я не смогу повторно подключиться к нему.x11vnc.service
находится в неактивном (мертвом) состоянии.
Спасибо!