VNC on ubuntu server
Сидел я вчера, и думал, что еще интересное можно придумать с ubuntu server(я свой старый пк использую как сервер). Вспомнил о существовании такой технологии как vnc, которая позволяет "транслировать" экран с одной системы в другую. Никогда до того момента, я не настраивал vnc, и первым делом полез в chatgpt, чтобы спросить как это делается, он выдал мне +- рабочее решение, но не во всем. Начнем с обновления репозиториев и установки рабочего окружения и самого vnc сервера.
sudo apt update && sudo apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils
Chatgpt посоветовал мне установить Tigervnc, ну я не стал спроить и поставил его.
sudo apt install tigervnc-standalone-server
Дальше он предложил поставить пароль, и кто мы такие, чтобы его не поставить
vncpasswd
И дальше можно уже запустить его, однако, я использовал эту команду для проверки
vncserver -localhost no :1
После запуска VNC-сервер будет работать на порту 5901 (потому что :1 → 5900 + 1).
Дальше, я изменил команду, чтобы можно было подключться, не только с localhosно и локальной сети, также добавил глубину цвета, разрешения экрана, и чтобы он запускался на 0.0.0.0
vncserver -interface 0.0.0.0 :1 -fg -localhost no -geometry 1920x1080 -depth 24
Но каждый раз запускать его ручками не очень удобно, вспоминать команду, в линуксе как никак есть сервисы, которые позволяют удобно запускать те или иные программы в фоне. Я создал сервис для vncserver по стандартному пути /etc/systemd/system/vncserver.service
[Unit] Description=Start TigerVNC server After=syslog.target network.target [Service] Type=simple WorkingDirectory=/home/kill_your_soul User=kill_your_soul Group=kill_your_soul Environment=HOME=/home/kill_your_soul ExecStartPre=-/bin/sh -c "/usr/bin/vncserver -kill :1 > /dev/null 2>&1" ExecStart=vncserver -interface 0.0.0.0 :1 -fg -localhost no -geometry 1920x1080 -depth 24 ExecStop=/usr/bin/vncserver -kill :1 [Install] WantedBy=multi-user.target
Вот такой сервис у меня получился, тут из интересного — это команда остановки, которая все той же командой убивает vncserver, который работает на 5901 порту, и перенаправляет весь вывод в поток /dev/null
Но запускать каждый раз ручками этот сервис, я не хочу, и попросил написать chatgpt скрипт на bash, который будет стартовать и останавливать сервис vncserver, не с первой попытки, но получился скрипт, который меня устроил.
#!/bin/bash
# Имя сервиса
SERVICE="vncserver.service"
# Функция для старта сервиса
start_vnc() {
echo "Запуск сервиса $SERVICE..."
sudo systemctl start $SERVICE
echo "Сервис $SERVICE успешно запущен."
}
# Функция для остановки сервиса
stop_vnc() {
echo "Остановка сервиса $SERVICE..."
sudo systemctl stop $SERVICE
echo "Сервис $SERVICE успешно остановлен."
}
# Проверка аргумента
case "$1" in
start)
start_vnc
;;
stop)
stop_vnc
;;
*)
echo "Использование: $0 {start|stop}"
exit 1
;;
esacВ принципе это универсальный скрипт, который легким движением руки будет запускать и останавливать сервис.
Ну и итог, как выглядит сам vnc. Так подключаемся к нему
А вот и сам рабочий стол сервера