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


29

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

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

Якщо я запускаю цю команду під час запуску або як завдання розкладу, вона не запуститься. Які мої варіанти?


Ви намагалися зрозуміти, чому це не почнеться?
Ігнасіо Васкес-Абрамс

Відповіді:


27

Я знайшов ці вказівки , шукаючи в Google " ubuntu запуск vnc сервера при запуску ".

  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

@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"

далі створіть порожній сценарій init та зробіть його виконуваним:

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
це насправді працює для мене, але єдине, що він зовсім не запускається автоматично, я думаю, тому що це може бути запит пароля користувача. оскільки його автоматично спрацьовує, я не бачу, щоб його просили. якщо я вручну запускаю скрипт, він запитує мій пароль користувача. як я можу це виправити?
droopie

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"'

Перед роботою я прошу своїх друзів запустити налаштування віддаленого робочого столу та позначити прапорець Sharing Allow ....
Після виходу з налаштувань запускається vino-сервер, і вони повідомляють мені IP-адресу, яку потрібно використовувати.
Коли робота закінчена, вони знову запустять «Налаштування», щоб позначити «Спільний доступ» ... вимкнено.
Після виходу з налаштувань vino-сервер зупиняється і зупиняється, навіть якщо він запущений у стані спільного доступу.
Я вважаю цю процедуру дуже зручною, а також найбезпечнішою для користувача.

PS: розробники вважають за краще їх програми запускатись локально (в рамках сеансу користувача), оскільки помилка не може впливати на глобальну систему таким чином.


0

В Ubuntu 12.1 мені вдалося зайти в Налаштування системи-> Користувачі та вибрати користувача та встановити "Автоматичний вхід-> УВІМКНЕНО"

Тоді я зміг використовувати жорсткий VNC, щоб увійти, не входячи в саму скриньку.

Добре працював для безголового lbux ubuntu


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

0

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

Я "успадкував" відповідальність за сервер, де кілька колег виконують наукові програми та оцінювання даних, кожен з окремим vnc. Сервер фактично працює постійно і стабільно протягом багатьох років, і користувачі лінуються зберігати свої відкриті вікна. Однак поодинокі сервери vncservers або X11 іноді застрягають, і велика неприємність закривати всіх користувачів, щоб знову запустити один сервер.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.