В общем есть желание запустить x11vnc при запуске kubuntu до того как пользователь залогинится. Так же есть желание сделать это через systemd. Сделать я это сделал, но имхо шибко криво через задний проход с костылём в виде дополнительного скрипта. Посему решил посоветовать как можно сделать лучше. Итого имеем работающий сейчас x11vnc.service:[Unit]
Плюс дополнительный скрипт /usr/local/etc/x11vnc_start_script
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#!/bin/bash
Для начала пояснение. x11vnc запускается с параметром -auth который в качестве аргумента принимает имя файла xauthority от sddm (если я ошибаюсь, то поправьте меня). Этот файл каждый раз новый с новым именем, действует на одну сессию и потом меняется. Т.е. когда вы нажали завершить сеанс, x11vnc прекращает работу, а sddm меняет файл. Поэтому надо перезапустить x11vnc. При этом я не могу фиксировано забить в параметры имя файла и использую $(ls /var/run/sddm/{*}) для этого. В папке один файл, поэтому пока работает, но я не уверен что это навечно. Поэтому мне этот костыль не нравится. И Хочется его заменить на что нибудь более надёжное. Т.е. по аналогии с pid файлами, есть ли где нибудь файл с постоянным именем в котором хранится имя актуального файла xauthority от sddm? Я не смог найти поэтому прошу помощи в нахождении его.
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
Во вторых мне не нравится костыль с дополнительным скриптом. Было бы неплохо обойтись без него. Но тут две проблемы. Первая это то, что 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 для этого не приспособлен. Но я подозреваю что есть какие нибудь хаки для решения этих проблем. И в связи с этим прошу совета как это сделать?
Спасибо за отличное решение! Небольшое дополнение. При описании сервиса можно указать команду как:
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).
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
источник
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 файлом респек.
Отправить комментарий