Автоматически запускать сервер VNC при запуске

28

Я установил рабочий стол Ubuntu на VPS-сервер Ubuntu 9.10 и смог подключиться к серверу с помощью TightVNC. Однако VNC-сервер на этом VPS может быть запущен только после входа в систему через SSH и ввода следующей команды:

vncserver :1 -geometry 800x600 -depth 16 -pixelformat rgb565

Если я запускаю эту команду при запуске или в качестве задачи по расписанию, она не запустится. Какие у меня варианты?

Нуль
источник
Вы пытались понять, почему это не начинается?
Игнасио Васкес-Абрамс

Ответы:

27

Я нашел эти инструкции , выполнив поиск в Google по запросу « ubuntu launch vnc server при запуске ».

  1. Установите сервер VNC.
  2. Запустите vncserverпервый раз, чтобы установить пароль.
  3. Добавьте следующий файл как /etc/init.d/vncserver(обязательно измените ПОЛЬЗОВАТЕЛЬ, ГЕОМЕТРИЮ, ИМЯ и т. Д.).
  4. sudo chmod +x /etc/init.d/vncserver
  5. sudo update-rc.d vncserver defaults

/etc/init.d/vncserver

#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          vncserver
# Required-Start:    networking
# Default-Start:     S
# Default-Stop:      0 6
### END INIT INFO

PATH="$PATH:/usr/X11R6/bin/"

# The Username:Group that will run VNC
export USER="mythtv"
#${RUNAS}

# The display that VNC will use
DISPLAY="1"

# Color depth (between 8 and 32)
DEPTH="16"

# The Desktop geometry to use.
#GEOMETRY="<WIDTH>x<HEIGHT>"
#GEOMETRY="800x600"
GEOMETRY="1024x768"
#GEOMETRY="1280x1024"

# The name that the VNC Desktop will have.
NAME="my-vnc-server"

OPTIONS="-name ${NAME} -depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}"

. /lib/lsb/init-functions

case "$1" in
start)
log_action_begin_msg "Starting vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver ${OPTIONS}"
;;

stop)
log_action_begin_msg "Stoping vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver -kill :${DISPLAY}"
;;

restart)
$0 stop
$0 start
;;
esac

exit 0
Стивен Дженнингс
источник
Я получаю следующее сообщение об ошибке gist.github.com/anonymous/821d0ec525abb2fe42d8a070c846fb9e , я считаю, что ваша конфигурация нуждается в обновлении с некоторыми пустыми значениями.
niftylettuce
у меня работает, но единственная проблема в том, что он запрашивает у меня пароль для запуска скрипта в первый раз. так как при загрузке я не могу войти. как я могу это исправить?
droopie
12

Если вам нужна более динамичная конфигурация и возможность подключения для нескольких пользователей, есть лучший способ сделать это. В качестве пользователя root создайте файл (и каталог, если он не существует) / etc / sysconfig / vncservers, т.е. выполните:

mkdir -p /etc/vncserver
touch /etc/vncserver/vncservers.conf

Добавьте серверы по мере необходимости для каждого пользователя, добавив что-то вроде следующего в файл vncservers.conf, который вы только что создали:

VNCSERVERS="1:justin 2:bob"
VNCSERVERARGS[1]="-geometry 1920x1080 -depth 24"
VNCSERVERARGS[2]="-geometry 800x600 -depth 8"

Затем создайте пустой скрипт инициализации и сделайте его исполняемым:

touch /etc/init.d/vncserver
chmod +x /etc/init.d/vncserver

добавьте следующее в /etc/init.d/vncserver:

#!/bin/bash

unset VNCSERVERARGS
VNCSERVERS=""
[ -f /etc/vncserver/vncservers.conf ] && . /etc/vncserver/vncservers.conf
prog=$"VNC server"

start() {
        . /lib/lsb/init-functions
        REQ_USER=$2
        echo -n $"Starting $prog: "
        ulimit -S -c 0 >/dev/null 2>&1
        RETVAL=0
        for display in ${VNCSERVERS}
        do
                export USER="${display##*:}"
                if test -z "${REQ_USER}" -o "${REQ_USER}" == ${USER} ; then
                        echo -n "${display} "
                        unset BASH_ENV ENV
                        DISP="${display%%:*}"
                        export VNCUSERARGS="${VNCSERVERARGS[${DISP}]}"
                        su ${USER} -c "cd ~${USER} && [ -f .vnc/passwd ] && vncserver :${DISP} ${VNCUSERARGS}"
                fi
        done
}

stop() {
        . /lib/lsb/init-functions
        REQ_USER=$2
        echo -n $"Shutting down VNCServer: "
        for display in ${VNCSERVERS}
        do
                export USER="${display##*:}"
                if test -z "${REQ_USER}" -o "${REQ_USER}" == ${USER} ; then
                        echo -n "${display} "
                        unset BASH_ENV ENV
                        export USER="${display##*:}"
                        su ${USER} -c "vncserver -kill :${display%%:*}" >/dev/null 2>&1
                fi
        done
        echo -e "\n"
        echo "VNCServer Stopped"
}

case "$1" in
start)
start $@
;;
stop)
stop $@
;;
restart|reload)
stop $@
sleep 3
start $@
;;
condrestart)
if [ -f /var/lock/subsys/vncserver ]; then
stop $@
sleep 3
start $@
fi
;;
status)
status Xvnc
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart|status}"
exit 1
esac

Как Стивен упомянул в своем ответе, вам нужно будет запустить vncserver ПО КАКИХ-ЛИБО ПОЛЬЗОВАТЕЛЯМ, под которым вы хотите войти. Я поместил это в заглавные буквы, потому что, если вы пропустите этот шаг, ничего из этого не будет работать. Так что как root вы можете сделать:

su justin -c vncserver
su bob -c vncserver

Это создаст каталог .vnc в каждом домашнем каталоге пользователей с соответствующими сценариями запуска.

Наконец, сделайте следующее:

update-rc.d vncserver defaults 99

Теперь вы можете перезагрузить или запустить сервис вручную, набрав:

service vncserver start
Джастин Бузер
источник
1
это на самом деле работает для меня, но единственное, что он не запускается автоматически, я думаю, потому что он может запрашивать пароль пользователя. так как он автоматически срабатывает, я не вижу, чтобы он просил об этом. если я вручную запускаю скрипт, он запрашивает мой пароль пользователя. Как я могу это исправить?
дропи
1

Я получаю доступ к Ubuntu друзей, которым помогаю, чтобы установить или настроить или научить их чему-либо.
Поскольку мне нужен доступ из Интернета через модем, я использую vino.
Все параметры общего доступа и безопасности включены во время доступа.
Я не хочу, чтобы vino-сервер был активным все время: просто отлично, он не запускается автоматически.
У меня не было меню Система> Удаленный рабочий стол.
Я отредактировал /usr/share/applications/vino-preferences.desktop следующим образом:

# OnlyShowIn=Unity;
Exec=bash -c 'vino-preferences;/usr/lib/vino/vino-server&zenity --info --text="Accès par Internet: `curl http://ipecho.net/plain`:5900"'

Перед началом работы я прошу своих друзей запустить «Настройки удаленного рабочего стола» и установить флажок «Разрешить общий доступ ...».
При выходе из Preferences запускается vino-сервер, и они сообщают мне IP-адрес для использования.
Когда работа закончена, они снова запускают Preference, чтобы установить флажок Разрешить общий доступ ... выключен.
При выходе из настроек, vino-сервер останавливается и останавливается, даже если запущен в состоянии общего доступа.
Я считаю эту процедуру очень удобной и самой безопасной для пользователя.

PS: разработчики предпочитают, чтобы их программы запускались локально (в рамках пользовательской сессии), потому что ошибка не может повлиять на глобальную систему таким образом.

Papou
источник
0

В Ubuntu 12.1 я смог зайти в Системные настройки-> Пользователи и выбрать пользователя и установить «Автоматический вход в систему -> ВКЛ»

После этого я смог использовать сжатый VNC, чтобы войти без входа в саму коробку.

Работал хорошо для безголовой Linux-коробки Ubuntu

Джим
источник
Из того, что я могу собрать, вопрос о включении vncserver при запуске, а не входа пользователя.
Роман Луштрик
0

Я предлагаю использовать решение Стивена Дженнингса также, если вам нужно несколько vnc для разных пользователей, просто создав несколько файлов vncserver_john, vncserver_bill, .... Это позволяет вам запускать / останавливать их отдельно. Конечно, хорошая практика программирования предлагает объединить код, общий для всех пользователей, в один файл и получить его от всех остальных.

Я «унаследовал» ответственность за сервер, где несколько коллег занимаются научным программированием и оценкой данных, каждый с отдельным VNC. Сервер фактически работает непрерывно и стабильно в течение многих лет, и пользователи становятся ленивыми, чтобы сохранить свои открытые окна. Однако отдельные серверы vncservers или X11 иногда зависают, и это большая неприятность - отключать всех пользователей, чтобы снова запустить один сервер.

Питер Стайер
источник