Вернуться назад

Установка и настройка VNC Server на Debian/Ubuntu/Linux Mint and Centos7

Чтобы установить VNC, достаточно выполнить команду:

# su - vncuser
После этого, запускаем VNC сервер:
$ vncserver
После запуска VNC-сервера, вам будет предложено создать VNC пароль. Устанавливаем любой удобный для вас пароль, но не более 9 символов ( если больше, то он обрежет его).

На рисунке ниже видно как стартанул наш vnc сервер, но нам его нужно немного подредактировать:

vncserver

Чтобы сделать настройку в сценарие запуска, мы должны убить сессию, что мы только что создали:

# cd ~
# vim .vnc/xstartup
Пример конфигурационного файла:
#!/bin/sh
# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
#exec /etc/X11/xinit/xinitrc
gnome-session --session=gnome-classic &

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
#x-terminal-emulator -geometry 1280x1024+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &

После чего запускаем нашу сессию с  разрешением экрана 1024×600:

# apt-get install gnome-core
PS: не забываем прописывать нужную строку в конфиг xstartup.
Если вы решите использовать другие графические интерфейсы:
Для Gnome-Desktop Environment
#!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS #startxfce4 & gnome-session & #startkde & #mate-session & #startlxde & #cinnamon & #openbox &[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources xsetroot -solid grey vncconfig -iconic &
После перезагрузки сервера, мы не будем иметь возможность подключиться к серверу с VNC, это потому, что команда “vncserver -geometry 1024×600″ , что мы набрали выше не является постоянным. Чтобы решить эту проблему, я будем использовать отличный сценарий Джастин Buser.Для начала создадим следующее:
# sudo mkdir -p /etc/vncserver
# sudo touch /etc/vncserver/vncservers.conf
# sudo vim /etc/vncserver/vncservers.conf
И добавляем:
VNCSERVERS="1:vncuser"
VNCSERVERARGS[1]="-geometry 1024x600 -depth 24"
Затем создайте пустой сценарий инициализации и сделайте его исполняемым:
# sudo touch /etc/init.d/vncserver
# sudo chmod +x /etc/init.d/vncserver
# sudo vim /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
только не забудьте сделать его исполняемым
Обновим все это: # sudo update-rc.d vncserver defaults 99
Сейчас перезапустим наш сервер:# sudo service vncserver restart
Если вы не можете получить доступ к VNC-сервера, то убедитесь, что вы открыли порты VNC в IPTables:
# iptables -L -n
если не открыли, то открываем их:
# iptables -A INPUT -m state --state NEW -m tcp -p tcp -m multiport --dports 5901:5903,6001:6003 -j ACCEPT
и сохраняем все изменения:
# iptables-save

Через команду можно посмотреть что все работает:

# netstat -a

 

После того как будут установлены все эти пакеты, нужно будет открыть файл /etc/default/locale и в нем отредактировать две первые строки заменив их на эти:

LANG="ru_RU.UTF-8"

LANGUAGE="ru:en"

Если ошибка аутентификации — назначаем пароль командой vncpasswd

Для debian8

Устанавливаем Xfce и VNC server (любители GNOME, KDE, LXDE, etc. устанавливают оболочку по своему вкусу).

# apt-get install xfce4 xfce4-goodies tightvncserver

Создаем пользователя от которого будем запускать vnc сервер.

# adduser vnc

Устанавливаем sudo (в Debian данный пакет не установлен по умолчанию).

# apt-get install sudo

Добавляем пользователя vnc в группу sudo.

# gpasswd -a vnc sudo

Переходим под пользователя vnc.

# su - vnc

Запускаем vnc сервер.

$ vncserver

Если это первый запуск vnc сервера, будет создан конфиг файл и запрошены некоторые параметры:

$ vncserver 

You will require a password to access your desktops.

Password: 
Verify:   
Would you like to enter a view-only password (y/n)? n
xauth:  file /home/vnc/.Xauthority does not exist

New 'X' desktop is my.server:1



Creating default startup script /home/vnc/.vnc/xstartup

Starting applications specified in /home/vnc/.vnc/xstartup

Log file is /home/vnc/.vnc/my.server:1.log

по умолчанию порт vnc сервера будет 5901, порт каждого следующего дисплея будет увеличиваться на 1 (5902,5903,…).

Проверить запущен ли VNC сервер и на каком порту слушает можно следующей командой.

$ netstat -nltp

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:5901            0.0.0.0:*               LISTEN      1054/Xtightvnc 

Убить конкретный дисплей можно так:

$ vncserver -kill :1
Killing Xtightvnc process ID 3246

:1 — какой дисплей нужно убить.

Создание скрипта автостарта vnc сервера.

Сначала убьем запущенный дисплей :1 (если он запущен).

$ vncserver -kill :1  

создаем скрипт запуска

$ sudo nano /usr/local/bin/myvnc

Добавляем следующие строки в файл:

#!/bin/bash
PATH="$PATH:/usr/bin/"
DISPLAY="1"
DEPTH="16"
GEOMETRY="1024x768"
OPTIONS="-depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}"

case "$1" in
start)
/usr/bin/vncserver ${OPTIONS}
;;

stop)
/usr/bin/vncserver -kill :${DISPLAY}
;;

restart)
$0 stop
$0 start
;;
esac
exit 0

если требуется — в скрипте можно изменить глубину цвета или разрешение экрана.

Делаем файл исполняемым.

$ sudo chmod +x /usr/local/bin/myvnc

использование созданного нами скрипта:

$ myvnc start             ###запустить vnc сервер
$ myvnc stop             ###остановить vnc сервер
$ myvnc restart         ###перезапустить vnc сервер

Теперь нужно позаботиться о том, чтобы настроенный нами vnc стартовал после загрузки сервера (запланированной и не очень).
Для этого создаем файл по следующему пути.

$ sudo nano /lib/systemd/system/myvnc.service

Добавляем следующий текст в файл:

[Unit]
Description=MyVnc

[Service]
Type=forking
ExecStart=/usr/local/bin/myvnc start
ExecStop=/usr/local/bin/myvnc stop
ExecReload=/usr/local/bin/myvnc restart
User=vnc

[Install]
WantedBy=multi-user.target
Пояснение

Включаем юнит в автозагрузку при старте системы.

$ sudo systemctl enable myvnc.service
Created symlink from /etc/systemd/system/multi-user.target.wants/myvnc.service to /lib/systemd/system/myvnc.service.

Смотрим статус созданного нами юнита.

$ sudo systemctl -l status myvnc.service
? myvnc.service - MyVnc
   Loaded: loaded (/lib/systemd/system/myvnc.service; enabled)
   Active: inactive (dead)

Дергаем systemd для поиска новых или измененных юнитов.

$ sudo systemctl daemon-reload



Centos7


yum install epel-release yum update yum clean all
yum groupinstall "X Window system"
yum groupinstall xfce
Скорее всего нужно сделать:
systemctl set-default graphical.target
yum install tigervnc-server
cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
adduser vnc_fastmoney
gpasswd -a vnc_fastmoney wheel
в дебиане wheel сменить на sudo
где vnc_fastmoney имя пользователя
cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
:1 номер дисплея?
nano /etc/systemd/system/vncserver@:1.service
Приводим к:
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=forking
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/sbin/runuser -l vnc_fastmoney -c "/usr/bin/vncserver %i -geometry 800x600 -depth 16"
PIDFile=/home/vnc_fastmoney/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target
Где vnc_fastmoney наш юзер
-geometry 800×600 разрешение при старте
-depth 16 глубина цвета
su - vnc_fastmoney
vncserver
при запросе генерим пароль, который будет запрашиваться при работе с внц
systemctl daemon-reload
systemctl enable vncserver@:1.service
netstat -tulpn | grep vnc
смотрим светится ли
в домашнем каталоге юзера проверить содержимое:
cat .vnc/xstartup 
#!/bin/sh
# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
xfce4-session
Для настройки локали в xfce в том же домашнем каталоге юзера создать файл:
.i18n
с содержимым:
export LANGUAGE=ru_RU.utf8
export LANG=ru_RU.utf8
export LC_ALL=ru_RU.utf8
После неплохо бы бутнуться:
reboot
и проверить работает подключившись уже по vnc по ip указывая номер дисплея :1 и пароль который мы генерили через vncserver


igel
Дата: 25 января 2019 г. в 00:21:54

Автор: igel