запуск x11vnc через systemd в Kubuntu 16.04

В общем есть желание запустить x11vnc при запуске kubuntu до того как пользователь залогинится. Так же есть желание сделать это через systemd. Сделать я это сделал, но имхо шибко криво через задний проход с костылём в виде дополнительного скрипта. Посему решил посоветовать как можно сделать лучше. Итого имеем работающий сейчас x11vnc.service:[Unit]
Description=Start x11vnc server at startup
After=graphical.target

[Service]
Type=simple
ExecStart=-/bin/bash -c "/usr/local/etc/x11vnc_start_script"

[Install]
WantedBy=graphical.target
Плюс дополнительный скрипт /usr/local/etc/x11vnc_start_script#!/bin/bash

while true
do
    sleep 2
    /usr/bin/x11vnc -display :0 -auth $(ls /var/run/sddm/{*}) \
                    -noxdamage -shared -rfbauth /home/.vnc/passwd \
                    -o /var/log/x11vnc.log -notruecolor -rfbport 5900
done
Для начала пояснение. x11vnc запускается с параметром -auth который в качестве аргумента принимает имя файла xauthority от sddm (если я ошибаюсь, то поправьте меня). Этот файл каждый раз новый с новым именем, действует на одну сессию и потом меняется. Т.е. когда вы нажали завершить сеанс, x11vnc прекращает работу, а sddm меняет файл. Поэтому надо перезапустить x11vnc. При этом я не могу фиксировано забить в параметры имя файла и использую $(ls /var/run/sddm/{*}) для этого. В папке один файл, поэтому пока работает, но я не уверен что это навечно. Поэтому мне этот костыль не нравится. И Хочется его заменить на что нибудь более надёжное. Т.е. по аналогии с pid файлами, есть ли где нибудь файл с постоянным именем в котором хранится имя актуального файла xauthority от sddm? Я не смог найти поэтому прошу помощи в нахождении его.
Во вторых мне не нравится костыль с дополнительным скриптом. Было бы неплохо обойтись без него. Но тут две проблемы. Первая это то, что systemd не умеет делать подстановку в команде. Т.е. ExecStart=/usr/bin/x11vnc -display :0 -auth $(ls /var/run/sddm/{*}) -rfbauth /home/.vnc/passwd -o /var/log/x11vnc.logВыдаст команду /usr/bin/x11vnc -display :0 -auth $(ls /var/run/sddm/{*}) -rfbauth /home/.vnc/passwd -o /var/log/x11vnc.log без подстановки вывода команды $(ls /var/run/sddm/{*}). Вторая проблема это организация вечного цикла. Вроде как systemd для этого не приспособлен. Но я подозреваю что есть какие нибудь хаки для решения этих проблем. И в связи с этим прошу совета как это сделать?

0
Гость - 11 Ноябрь, 2016 - 11:57

Спасибо за отличное решение! Небольшое дополнение. При описании сервиса можно указать команду как:

ExecStart=/bin/bash -c "/usr/bin/x11vnc -auth $(ls /var/run/sddm/{*}) -forever <прочие опции>"

Дополнительный скрипт не понадобится: ключ -forever обеспечит циклический запуск x11vnc, а звёздочка раскроется, так как команда внутри кавычек уже передана в bash в явном виде. Кроме того, можно не указывать ключ -o, поскольку systemctl сам умеет вести логи (systemctl status x11vnc или journalctl -u x11vnc.service).

0
Eugene1976 - 20 Май, 2017 - 22:37

linuxmint 18.1 kde

сработал такой скрипт

[Unit]
Description=Remote control x11vnc
After=graphical.target

[Service]
Restart=always
RestartSec=30
Type=simple
ExecStart=-/bin/bash -c "/usr/bin/x11vnc -display :0 -shared -dontdisconnect -many \
-auth $(ls /var/run/sddm/{*}) -rfbauth /etc/x11vnc.passwd -o /var/log/x11.log"

[Install]
WantedBy=graphical.target

источник

0
Гость - 10 Апрель, 2018 - 13:38

crontab -e

Вставить:

* * * * * if [[ $(ps aux | grep x11vnc | grep -v grep) ]]; then echo "there are process"; else /usr/bin/x11vnc -xkb -auth $(ls /var/run/sddm/{*}) -rfbauth /root/.x11vnc/passwd -noxrecord -noxfixes -noxdamage -forever -bg -rfbport 5900 -o /var/log/x11vnc.log > /dev/null; fi

Решили проблему цикла, за решение проблемы с auth файлом респек.

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры