pkg install x11vnc # FreeBSD
apt install x11vnc # ubuntu
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
#!/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"
任意で以下の設定を追加・変更できる。
x11vnc_logfile="/dev/null"
x11vnc_port="5900"
x11vnc_display=":0"
x11vnc_passwdfile="/usr/local/etc/x11vnc.passwd"
x11vnc_authpath="/var/run/slim.auth"
nano /etc/systemd/system/x11vnc.service
x11vnc -storepasswd /etc/x11vnc.passwd
systemctl daemon-reload
systemctl enable x11vnc
systemctl start x11vnc
[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
"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
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