Для удалённой помощи пользователям на своей работе я использую vnc4server, который запускается на :0 дисплее.
На старых системах (14.04) запуск производился автоматом при входе пользователя в систему, так что при необходимости я сразу мог подключиться к нужной машине.
Сейчас потихоньку начинаю переходить на 16.04 и столкнулся с проблемой - для запуска сервиса у пользователей требует авторизацию от рута! Как так?! Почему раньше всё работало?
crew@xu-x64-1604:~$/etc/init.d/vnc0 start
[....] Starting vnc0 (via systemctl): vnc0.service==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Чтобы запустить «vnc0.service», необходимо пройти аутентификацию.
Authenticating as: root
Password:
crew@xu-x64-1604:~$ systemctl stop vnc0
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Чтобы остановить «vnc0.service», необходимо пройти аутентификацию.
Authenticating as: root
Password:
Вот текст самого скрипта:
$ cat /etc/init.d/vnc0
#!/bin/sh
### BEGIN INIT INFO
# Provides: vncserver
# Required-Start: networking
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: x0vnc4launcher
# Description:
### END INIT INFO
PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
USER=$(ps aux | grep xfce4-session | grep -v grep | awk '{print $1}')
ADDR=$(ip route | grep src | awk '{print $9}')
# The display that VNC will use
DISPLAY="0"
OPTIONS="-display :${DISPLAY}"
. /lib/lsb/init-functions
case "$1" in
start)
sleep 5
log_action_begin_msg "Starting vncserver for user '${USER}' on ${ADDR}:${DISPLAY}"
su ${USER} -c "x0vnc4server ${OPTIONS} -PasswordFile ~/.vnc/passwd &" > /dev/null 2>&1
;;
stop)
log_action_begin_msg "Stoping vncserver for user '${USER}' on ${ADDR}:${DISPLAY}"
killall x0vnc4server
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: /etc/init.d/vnc0 {start|stop|restart}"
exit 1
esac
exit 0
Сам сервис из под пользователя (в 16.04) не желает запускаться ни вручную, ни из автозагрузки. В 14.04 всё замечательно работало!
Можно как-то это победить?