RetroBSD Net
Title:
TigerVNC server service (as unprivileged user)
Authors:
Paolo Vincenzo Olivo
Date:
Topics:
NetBSD, Self-hosting
Id:
c5b07d

Note: this article assumes having net/tigervnc installed as a Xvnc binary provider*

For my Rpi4, I wrote a vncserver rc.d service script which starts a standard Xvnc server for a single, dedicated (with restricted class capabilities set in login.conf), unprivileged user upon boot: #!/bin/sh # PROVIDE: vncserver # REQUIRE: NETWORKING SERVERS DAEMON LOGIN # KEYWORD: shutdown

$_rc_subr_loaded . /etc/rc.subr name=vncserver rcvar=$name

VNCSERVER=/usr/pkg/bin/vncserver

load_rc_config $name vncdir="/home/vnc/.vnc" required_files="${vncdir}/passwd ${vncdir}/xstartup" start_cmd="vncserver_start" stop_cmd="vncserver_stop"

: ${vncserver_user="vnc"} : ${vncserver_display="1"} : ${vncserver_depth="24"} : ${vncserver_geometry="1024x768"}

vncserver_start() { CMD="$VNCSERVER -depth ${vncserver_depth} -geometry ${vncserver_geometry} :${vncserver_display}" su -l ${vncserver_user} -c "${CMD}" }

vncserver_stop() { CMD="$VNCSERVER -kill :${vncserver_display}" su -l ${vncserver_user} -c "${CMD}" }

run_rc_command "$1"

Put it in */etc/rc.d*, change its permissions to 555 and have it started:

$ echo vncserver=YES >> /etc/rc.conf $ service vncserver start

Make sure a suitable TERM definition is set system-wide in */etc/profile*, otherwise tset shall prompt you to interactively provide one. Also, the service requires *~/.vnc/passwd* and *~/.vnc/xstartup* to be present and readable; my ~/.vnc/xstartup:

PATH=/bin:/usr/bin:/usr/X11R7/bin:/usr/pkg/sbin:/usr/local/bin unset SESSION_MANAGER. unset DBUS_SESSION_BUS_ADDRESS LC_LANG="en_US.UTF-8"; export LC_LANG LC_CTYPE="en_US.UTF-8"; export LC_CTYPE setxkpmap it xsetroot -grey xset m 55/20 4 xset r rate 250 40 xset +fp /usr/pkg/share/fonts/X11/artwiz-aleczapka/ xset +fp /usr/pkg/share/fonts/X11/Dina/ xrdb ${HOME}/.Xresources xmodmap ${HOME}/.xmodmap xclock & xload & ctwm -W &

For LAN session, you may want to additionally configure a (https://man.netbsd.org/npf.7) firewall to allow incoming VNC connections on local network only and reject everything else.

$NIC = ifaddrs(your network interface here) $LAN = { 192.168.1.1/24 } alg "icmp"

group default { pass final on lo0 all pass stateful out final all pass stateful in final proto tcp from $LAN to $NIC port 5901 block return in final all }


Powered by NetBSD