1

VNC service was working fine until a recent power outage.

When I try to run

systemctl start vncserver@:1.service

it gives a message as

Job for vncserver@:1.service failed because a configured resource limit was exceeded. See "systemctl status vncserver@:1.service" and "journalctl -xe" for details.

and when I run

systemctl status vncserver@:1.service

it gives the following output

● vncserver@:1.service - Remote desktop service (VNC)
   Loaded: loaded (/etc/systemd/system/vncserver@:1.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Mon 2018-08-06 11:48:03 +03; 50s ago
  Process: 1238 ExecStart=/usr/sbin/runuser -l abdullah -c /usr/bin/vncserver %i -geometry 1920x1080 (code=exited, status=255)
  Process: 1224 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)

Aug 06 11:47:56 RESysLab-Server_Machine systemd[1]: Starting Remote desktop s...
Aug 06 11:48:03 RESysLab-Server_Machine systemd[1]: vncserver@:1.service: con...
Aug 06 11:48:03 RESysLab-Server_Machine systemd[1]: Failed to start Remote de...
Aug 06 11:48:03 RESysLab-Server_Machine systemd[1]: Unit vncserver@:1.service...
Aug 06 11:48:03 RESysLab-Server_Machine systemd[1]: vncserver@:1.service failed.
Hint: Some lines were ellipsized, use -l to show in full.

journal -xe

includes the following messages:

Aug 06 11:58:32 RESysLab-Server_Machine runuser[4805]: pam_unix(runuser-l:session): session opened for user abdullah by (uid=0)
Aug 06 11:58:32 RESysLab-Server_Machine runuser[4805]: Warning: RESysLab-Server_Machine:1 is taken because of /tmp/.X11-unix/X1
Aug 06 11:58:32 RESysLab-Server_Machine runuser[4805]: Remove this file if there is no X server RESysLab-Server_Machine:1
Aug 06 11:58:32 RESysLab-Server_Machine runuser[4805]: A VNC server is already running as :1
Aug 06 11:58:32 RESysLab-Server_Machine runuser[4805]: Warning: RESysLab-Server_Machine:1 is taken because of /tmp/.X11-unix/X1
Aug 06 11:58:32 RESysLab-Server_Machine runuser[4805]: Remove this file if there is no X server RESysLab-Server_Machine:1
Aug 06 11:58:32 RESysLab-Server_Machine runuser[4805]: Warning: RESysLab-Server_Machine:2 is taken because of /tmp/.X11-unix/X2
Aug 06 11:58:32 RESysLab-Server_Machine runuser[4805]: Remove this file if there is no X server RESysLab-Server_Machine:2
Aug 06 11:58:32 RESysLab-Server_Machine runuser[4805]: Warning: RESysLab-Server_Machine:3 is taken because of /tmp/.X11-unix/X3
Aug 06 11:58:32 RESysLab-Server_Machine runuser[4805]: Remove this file if there is no X server RESysLab-Server_Machine:3
Aug 06 11:58:35 RESysLab-Server_Machine runuser[4805]: New 'RESysLab-Server_Machine:6 (abdullah)' desktop is RESysLab-Server_Machine:6
Aug 06 11:58:35 RESysLab-Server_Machine runuser[4805]: Starting applications specified in /home/abdullah/.vnc/xstartup
Aug 06 11:58:35 RESysLab-Server_Machine runuser[4805]: Log file is /home/abdullah/.vnc/RESysLab-Server_Machine:6.log
Aug 06 11:58:35 RESysLab-Server_Machine runuser[4805]: pam_unix(runuser-l:session): session closed for user abdullah
Aug 06 11:58:35 RESysLab-Server_Machine systemd[1]: PID file /home/abdullah/.vnc/RESysLab-Server_Machine:1.pid not readable (yet?) after start.
Aug 06 11:58:35 RESysLab-Server_Machine systemd[1]: Failed to start Remote desktop service (VNC).

What should I do to solve this problem?

1

To automate removing of the remnant socket files, as mentioned in the accepted answer, I ended up with this /etc/systemd/system/vncserver@.service file:

[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target

[Service]
Type=forking

# Clean any existing files in /tmp/.X11-unix environment
Environment="display_temp=%i"
ExecStartPre=-/bin/sh -c "/usr/bin/vncserver -kill %i > /dev/null 2>&1"
ExecStartPre=-/bin/sh -c "/bin/rm -f /tmp/.X11-unix/X$${display_temp:1} /tmp/.X$${display_temp:1}-lock"
ExecStart=/usr/sbin/runuser -l usr1cv8 -c "/usr/bin/vncserver %i"
PIDFile=/home/usr1cv8/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1'

[Install]
WantedBy=multi-user.target

Main differences from the original config:

  • save value of the systemd specifier %i as an environmental variable display_temp, since we need to get rid of a colon on the next step (:1 -> 1)
  • after vncserver -kill we remove socket under /tmp/.X11-unix/ directory and lock file in /tmp/. In order to use environment variable substitution, we need to escape dollar sign like this: $$ (see that answer for more details: https://unix.stackexchange.com/a/216786)
| improve this answer | |
0

I found the solution: removing the file X1 via rm -f /tmp/.X11-unix/X1 and restarting VNC server worked.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.