Created
October 2, 2025 13:09
-
-
Save voleoo/c93eef6adebb1156b83547fa6bfd6f18 to your computer and use it in GitHub Desktop.
Revisions
-
voleoo created this gist
Oct 2, 2025 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,232 @@ # Автозапуск віртуального дисплея `: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) Сервіс `[email protected]` — піднімає віртуальний X-сервер Створити юніт: ```bash sudo tee /etc/systemd/system/[email protected] >/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 [email protected] sudo systemctl start [email protected] ``` Перевірити статус: ```bash systemctl status [email protected] ``` --- ## 2) Сервіс `[email protected]` — запускає XFCE-сесію на віртуальному дисплеї Створити юніт: ```bash sudo tee /etc/systemd/system/[email protected] >/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 [email protected] sudo systemctl start [email protected] ``` Статус: ```bash systemctl status [email protected] ``` --- ## 3) (Опціонально) `[email protected]` — VNC-доступ до дисплея `:99` > **Безпека:** За замовчуванням приклад нижче запускає VNC **без пароля** (`-nopw`). Для продуктивного використання рекомендую створити файл пароля: > ```bash > x11vnc -storepasswd > # створить файл ~/.vnc/passwd > ``` > і **замінити** у `ExecStart` ключ `-nopw` на `-rfbauth /home/<USER>/.vnc/passwd`. Створити юніт: ```bash sudo tee /etc/systemd/system/[email protected] >/dev/null <<'EOF' [Unit] Description=VNC server on display %i After=xfce@%i.service [Service] Environment=DISPLAY=:%i # Заміни -nopw на -rfbauth /home/<USER>/.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 [email protected] sudo systemctl start [email protected] ``` За замовчуванням `x11vnc` слухає порт `5900`. Підключайся VNC-клієнтом до `IP:5900`. --- ## Приклади корисних команд ```bash # Журнали конкретного сервісу journalctl -u [email protected] -e -f journalctl -u [email protected] -e -f journalctl -u [email protected] -e -f # Перезапуск sudo systemctl restart [email protected] sudo systemctl restart [email protected] sudo systemctl restart [email protected] # Вимкнути автозапуск sudo systemctl disable [email protected] ``` --- ## Типові проблеми і рішення - **Чорний екран у VNC / немає панелі XFCE** Переконайся, що `DISPLAY=:%i` вказано у `[email protected]` та що `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` у `[email protected]` на бажаний, наприклад `2560x1440x24`. --- ## Швидкий старт (копіпаст) ```bash # 1) Пакети sudo apt update && sudo apt install -y xvfb x11vnc # 2) Xvfb (як root або вкажи User=... у файлі) sudo tee /etc/systemd/system/[email protected] >/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/[email protected] >/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/[email protected] >/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 [email protected] [email protected] sudo systemctl start [email protected] [email protected] # 6) (Опційно) Увімкнути VNC sudo systemctl enable [email protected] && sudo systemctl start [email protected] ```