2021/02/20作成, 2020/06/21更新

x11vncをインストールし自動起動する

インストール

pkg install x11vnc    # FreeBSD
apt install x11vnc    # ubuntu

自動起動

FreeBSD 12.1

ee /usr/local/etc/rc.d/x11vnc  # 内容は後述
x11vnc -storepasswd /usr/local/etc/x11vnc.passwd
chmod +x /usr/local/etc/rc.d/x11vnc
service x11vnc enable
service x11vnc start

/usr/local/etc/rc.d/x11vnc

#!/bin/sh

# $ FreeBSD $ 2019/12/30 Isaponsoft(Isao Shibuya)
#
# PROVIDE: x11vnc
# REQUIRE: LOGIN cleanvar moused syscons dbus lightdm
# KEYWORD: shutdown
#
. /etc/rc.subr

export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
name="x11vnc"
rcvar=x11vnc_enable

load_rc_config $name
: ${x11vnc_enable:="NO"}
: ${x11vnc_logfile="/dev/null"}
: ${x11vnc_port="5900"}
: ${x11vnc_display=":0"}
: ${x11vnc_passwdfile="/usr/local/etc/x11vnc.passwd"}
: ${x11vnc_authpath="guess"}

command="/usr/local/bin/${name}"
command_args="-auth ${x11vnc_authpath} -display ${x11vnc_display} -rfbport ${x11vnc_port} -forever -loop -noxdamage -repeat -rfbauth ${x11vnc_passwdfile} > ${x11vnc_logfile} 2>&1 &"

run_rc_command "$1"

/etc/rc.conf

任意で以下の設定を追加・変更できる。

x11vnc_logfile="/dev/null"
x11vnc_port="5900"
x11vnc_display=":0"
x11vnc_passwdfile="/usr/local/etc/x11vnc.passwd"
x11vnc_authpath="/var/run/slim.auth"

Ubuntu

nano /etc/systemd/system/x11vnc.service
x11vnc -storepasswd /etc/x11vnc.passwd
systemctl daemon-reload
systemctl enable x11vnc
systemctl start x11vnc

/etc/systemd/system/x11vnc.service

[Unit]
Description=x11vnc (Remote access)
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth guess -display :0 -rfbauth /etc/x11vnc.passwd -rfbport 5900 -forever -loop -noxdamage -repeat -shared
ExecStop=/bin/kill -TERM $MAINPID
ExecReload=/bin/kill -HUP $MAINPID
KillMode=control-group
Restart=on-failure

[Install]
WantedBy=graphical.target

Xをヘッドレス化する

"SubSection Display" で "Virtual" を設定するのがコツ。これでモニタを接続しなくても良くなる。

Section "Monitor"
        Identifier "DummyMonitor0"
EndSection

Section "Device"
        Identifier      "X11VncGgraphics0"
        Driver          "nvidia"           # nvidia, amdgpu, intel, etc...
        BusID           "PCI:3:0:0"        # search from pciconf(FreeBSD), lspci(Ubuntu)
EndSection

Section "Screen"
        Identifier      "Screen0"
        DefaultDepth    24
        Device          "X11VncGgraphics0"
        Monitor         "DummyMonitor0"
        SubSection      "Display"
                Depth           24
                Virtual         1280 720
        EndSubSection
EndSection

AMD GPU

Driverをamdgpuに変更したらVNC経由での実行がものすごく遅くなった…。というわけで色々試したり調べた結果、

Driver sectionに ShadowPrimary on を設定する。glxgearsなどOpenGLを使うものがが正しく動かなくなるが、一応Xを操作できるくらいにはなる。

Section "Device"
        Identifier      "X11VncGgraphics0"
        Driver          "amdgpu"
        Option          "ShadowPrimary" "on"
        BusID           "PCI:3:0:0"        # search from pciconf(FreeBSD), lspci(Ubuntu)
EndSection