From bf243a3329d42194b9a110535bf81026fb2b2aa2 Mon Sep 17 00:00:00 2001 From: Mark Mielke Date: Wed, 29 Jul 2020 00:01:07 -0400 Subject: [PATCH] vncserver: Display check should confirm lock file is still valid If the X server is not shut down cleanly, it may leave lock files around that "vncserver" has previously mis-identified as evidence that the display number is still in use. Instead of checking for existence of /tmp/.X-lock, the code will now extract the PID from the lock file and confirm that a process exists with the same PID. This will eliminate false positives in the case that this file references a PID that no longer exists. The Xorg server does not have a problem with fixing this file when it next starts up. It is only important to avoid using the port if it is still in use. --- unix/vncserver/vncserver.in | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/unix/vncserver/vncserver.in b/unix/vncserver/vncserver.in index 1b5717e8..eee27fff 100755 --- a/unix/vncserver/vncserver.in +++ b/unix/vncserver/vncserver.in @@ -366,9 +366,11 @@ sub CheckDisplayNumber my $x11_lock_path = "/tmp/.X$n-lock"; if (-e $x11_lock_path) { - warn "\nWarning: $host:$n is taken because of $x11_lock_path\n"; - warn "Remove this file if there is no X server $host:$n\n"; - return 0; + my($pid) = `cat "$x11_lock_path"` =~ /^\s*(\d+)\s*$/; + if (defined($pid) && kill(0, $pid)) { + # Lock is associated with valid PID. + return 0; + } } my $rfb_port = 5900 + $n; -- 2.39.5