# Автозапуск віртуального дисплея `:99` з XFCE (і опціонально VNC) на Linux Цей гайд налаштовує **Xvfb** як віртуальний X-сервер на дисплеї `:99`, запускає **XFCE** як сесію поверх нього та (за потреби) додає **x11vnc** для віддаленого доступу. Усе оформлено у вигляді `systemd` сервісів, щоб все стартувало автоматично при завантаженні системи. --- ## Вимоги - Debian/Ubuntu-подібна система з `systemd` - Встановлений XFCE (в тебе вже встановлено) - Пакети: `xvfb`, `x11vnc` (опціонально) ### Встановлення пакетів ```bash sudo apt update sudo apt install -y xvfb x11vnc ``` > Якщо VNC не потрібен — `x11vnc` можна не ставити. --- ## 1) Сервіс `xvfb@.service` — піднімає віртуальний X-сервер Створити юніт: ```bash sudo tee /etc/systemd/system/xvfb@.service >/dev/null <<'EOF' [Unit] Description=Start Xvfb on display %i After=network.target [Service] ExecStart=/usr/bin/Xvfb :%i -screen 0 1920x1080x24 -ac +extension GLX +render Restart=always # User буде задано у конкретному інстансі або заміни на конкретного юзера: # User=root # Або прибери цей рядок і запусти як root-сервіс [Install] WantedBy=multi-user.target EOF ``` > **Примітка:** Якщо хочеш запускати від конкретного користувача (наприклад `superman`), **заміни** рядок `# User=root` на `User=superman`. > Якщо хочеш запустити як root — розкоментуй `User=root`. > Якщо рядок `User=` не вказаний — сервіс буде виконуватись як root. **Увімкнути та запустити для дисплея `:99`:** ```bash sudo systemctl daemon-reload sudo systemctl enable xvfb@99.service sudo systemctl start xvfb@99.service ``` Перевірити статус: ```bash systemctl status xvfb@99.service ``` --- ## 2) Сервіс `xfce@.service` — запускає XFCE-сесію на віртуальному дисплеї Створити юніт: ```bash sudo tee /etc/systemd/system/xfce@.service >/dev/null <<'EOF' [Unit] Description=XFCE desktop on Xvfb display %i After=xvfb@%i.service [Service] Environment=DISPLAY=:%i ExecStart=/usr/bin/startxfce4 Restart=always # Дивись примітку щодо User у попередньому сервісі: # User=superman # або User=root [Install] WantedBy=multi-user.target EOF ``` **Увімкнути та запустити:** ```bash sudo systemctl daemon-reload sudo systemctl enable xfce@99.service sudo systemctl start xfce@99.service ``` Статус: ```bash systemctl status xfce@99.service ``` --- ## 3) (Опціонально) `x11vnc@.service` — VNC-доступ до дисплея `:99` > **Безпека:** За замовчуванням приклад нижче запускає VNC **без пароля** (`-nopw`). Для продуктивного використання рекомендую створити файл пароля: > ```bash > x11vnc -storepasswd > # створить файл ~/.vnc/passwd > ``` > і **замінити** у `ExecStart` ключ `-nopw` на `-rfbauth /home//.vnc/passwd`. Створити юніт: ```bash sudo tee /etc/systemd/system/x11vnc@.service >/dev/null <<'EOF' [Unit] Description=VNC server on display %i After=xfce@%i.service [Service] Environment=DISPLAY=:%i # Заміни -nopw на -rfbauth /home//.vnc/passwd для пароля ExecStart=/usr/bin/x11vnc -display :%i -nopw -forever -listen 0.0.0.0 -xkb Restart=always # User=superman # або User=root [Install] WantedBy=multi-user.target EOF ``` **Увімкнути та запустити:** ```bash sudo systemctl daemon-reload sudo systemctl enable x11vnc@99.service sudo systemctl start x11vnc@99.service ``` За замовчуванням `x11vnc` слухає порт `5900`. Підключайся VNC-клієнтом до `IP:5900`. --- ## Приклади корисних команд ```bash # Журнали конкретного сервісу journalctl -u xvfb@99.service -e -f journalctl -u xfce@99.service -e -f journalctl -u x11vnc@99.service -e -f # Перезапуск sudo systemctl restart xvfb@99.service sudo systemctl restart xfce@99.service sudo systemctl restart x11vnc@99.service # Вимкнути автозапуск sudo systemctl disable x11vnc@99.service ``` --- ## Типові проблеми і рішення - **Чорний екран у VNC / немає панелі XFCE** Переконайся, що `DISPLAY=:%i` вказано у `xfce@.service` та що `xvfb@99` запущено раніше. Дивись `After=xvfb@%i.service`. - **`startxfce4` не знаходиться** Встанови `xfce4` пакет: `sudo apt install -y xfce4 xfce4-goodies`. - **Клавіатура/розкладка у VNC** Додай `-xkb` у `x11vnc` (вже додано). За потреби встанови `x11-xkb-utils` і налаштуй `setxkbmap` у автозапуск XFCE. - **Права користувача** Якщо запускаєш від не-root користувача, задекларуй `User=<ім'я>` в юнітах, і переконайся, що у нього є права читати `~/.vnc/passwd` (якщо використовуєш пароль). --- ## Зміна роздільної здатності Змініть параметр `-screen 0 1920x1080x24` у `xvfb@.service` на бажаний, наприклад `2560x1440x24`. --- ## Швидкий старт (копіпаст) ```bash # 1) Пакети sudo apt update && sudo apt install -y xvfb x11vnc # 2) Xvfb (як root або вкажи User=... у файлі) sudo tee /etc/systemd/system/xvfb@.service >/dev/null <<'EOF' [Unit] Description=Start Xvfb on display %i After=network.target [Service] ExecStart=/usr/bin/Xvfb :%i -screen 0 1920x1080x24 -ac +extension GLX +render Restart=always # User=root [Install] WantedBy=multi-user.target EOF # 3) XFCE sudo tee /etc/systemd/system/xfce@.service >/dev/null <<'EOF' [Unit] Description=XFCE desktop on Xvfb display %i After=xvfb@%i.service [Service] Environment=DISPLAY=:%i ExecStart=/usr/bin/startxfce4 Restart=always # User=root [Install] WantedBy=multi-user.target EOF # 4) (Опційно) VNC sudo tee /etc/systemd/system/x11vnc@.service >/dev/null <<'EOF' [Unit] Description=VNC server on display %i After=xfce@%i.service [Service] Environment=DISPLAY=:%i ExecStart=/usr/bin/x11vnc -display :%i -nopw -forever -listen 0.0.0.0 -xkb Restart=always # User=root [Install] WantedBy=multi-user.target EOF # 5) Увімкнення сервісів sudo systemctl daemon-reload sudo systemctl enable xvfb@99.service xfce@99.service sudo systemctl start xvfb@99.service xfce@99.service # 6) (Опційно) Увімкнути VNC sudo systemctl enable x11vnc@99.service && sudo systemctl start x11vnc@99.service ```