Skip to content

Instantly share code, notes, and snippets.

@thanhtantran
Created January 14, 2026 13:57
Show Gist options
  • Select an option

  • Save thanhtantran/857dac946b7b0591ea636e0eea286a72 to your computer and use it in GitHub Desktop.

Select an option

Save thanhtantran/857dac946b7b0591ea636e0eea286a72 to your computer and use it in GitHub Desktop.
Headless Kiosk Chromium + X11VNC trên Orange Pi

Headless Kiosk Chromium + X11VNC trên Orange Pi CM4 / 3B (RK3566)

Ubuntu 22.04.5 Server – Không HDMI – Xorg Dummy

Mục tiêu

  • Không cần HDMI / màn hình vật lý
  • Xorg chạy headless bằng dummy driver
  • Chromium chạy fullscreen (kiosk mode)
  • Mở cố định: http://localhost:5000
  • Điều khiển từ xa bằng x11vnc trong LAN
  • Tự động chạy sau reboot
  • Phân quyền rõ ràng:
    • Xorg: root
    • Kiosk + Chromium + x11vnc: user thường (orangepi)

Môi trường kiểm chứng

  • Board: Orange Pi CM4 (RK3566)
  • OS: Ubuntu 22.04.5 Server
  • User non-root: orangepi

1. Cài đặt các gói cần thiết

sudo apt update
sudo apt install -y \
  xorg \
  xserver-xorg-video-dummy \
  xserver-xorg-legacy \
  openbox \
  chromium-browser \
  x11vnc \
  xdg-utils \
  python3-xdg \
  dbus-x11 \
  x11-xserver-utils

2. Cấu hình Xorg Dummy (Headless)

/etc/X11/xorg.conf

Section "Device"
    Identifier  "DummyDevice"
    Driver      "dummy"
    VideoRam    256000
EndSection

Section "Monitor"
    Identifier  "DummyMonitor"
    HorizSync   28.0-80.0
    VertRefresh 48.0-75.0
EndSection

Section "Screen"
    Identifier  "DummyScreen"
    Device      "DummyDevice"
    Monitor     "DummyMonitor"
    DefaultDepth 24
    SubSection "Display"
        Depth   24
        Modes   "1920x1080"
    EndSubSection
EndSection

3. Systemd service Xorg (root)

[Unit]
Description=Headless Xorg Dummy
After=network.target

[Service]
Type=simple
ExecStart=/usr/lib/xorg/Xorg :0 -config /etc/X11/xorg.conf
Restart=always

[Install]
WantedBy=multi-user.target

4. Openbox + Chromium (orangepi)

xset s off
xset s noblank
xset -dpms

chromium-browser --kiosk http://localhost:5000 &

5. Kiosk service (orangepi)

[Unit]
Description=Kiosk Chromium Session
After=xorg-dummy.service
Requires=xorg-dummy.service

[Service]
User=orangepi
Environment=DISPLAY=:0
ExecStart=/bin/bash -lc "openbox-session"
Restart=always

[Install]
WantedBy=multi-user.target

6. x11vnc service (orangepi)

[Unit]
Description=x11vnc Headless Server
After=xorg-dummy.service
Requires=xorg-dummy.service

[Service]
User=orangepi
Environment=DISPLAY=:0
ExecStart=/usr/bin/x11vnc -display :0 -forever -shared -nopw
Restart=always

[Install]
WantedBy=multi-user.target

7. Reboot & kiểm tra

sudo reboot
vncviewer IP:5900
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment