systemctl .service file for vncserver under CentOS 7.7
People can do almost everything vis ssh under Linux, no exception for CentOS. But in some cases, using a X Windows improves efficiency greatly.
Tiger VNC server is a good server end package for VNC protocal under CentOS.
Tonight, just an hour ago, I encountered a disaster due to an unprofessional systemctl script privided by Tiger VNC server devolopers.
I’m tired so I shall not record the details.
If you are suffering problems while you are deploying autostart VNC server via systemctl, like:
New main PID <pid> does not belong to service, and PID file is not owned by root. Refusing.
;- Enabled multiple vnc ports for no reason;
- Can not input password when the vnc client in locked screen;
....
Just try a .service file as fllow:
Do !NOT! forget to change USERNAME to your own user.
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=forking
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/sbin/runuser -l <USERNAME> -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/sbin/runuser -l <USERNAME> -c "/usr/bin/vncserver :1"
ExecStartPost=/bin/sh -c '/usr/bin/cat /home/<USERNAME>/.vnc/%H%i.pid > /tmp/vnc-server.pid'
PIDFile=/tmp/vnc-server.pid
ExecStop=/sbin/runuser -l <USERNAME> -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target
Thanks a lot for your precious help!
I have modified the script to work with multiple users or multiple connections, as follows
ExecStart=/sbin/runuser -l -c "/usr/bin/vncserver %i -geometry 1440x900 -localhost -nolisten tcp"
PIDFile=/tmp/vnc-server-%H%i.pidExecStartPost=/bin/sh -c '/usr/bin/cat /home//.vnc/%H%i.pid > /tmp/vnc-server-%H%i.pid'
where I included the optional directives -localhost, -geometry and -nolisten.