Skip to main content

VNC Server and Client Configuration (TigerVNC)

To ensure your TigerVNC client automatically reconnects after a network disruption while using a mobile hotspot and PfSense's OpenVPN, you can implement a combination of scripting and configuration adjustments. Here's a concise approach to address this issue:

  1. Verify VPN Auto-Reconnect: Ensure your PfSense OpenVPN client on your device is configured to automatically reconnect. In PfSense, check the OpenVPN client settings for options like "Keepalive" or "Reconnect on failure." Set a low keepalive interval (e.g., 10 60) to detect and recover from disconnections quickly.

  2. Use a VNC Client with Auto-Reconnect: TigerVNC's default client may not support automatic reconnection natively. Consider using a VNC client that supports auto-reconnect, such as:

    • RealVNC Viewer: Has a built-in reconnect option.
    • Remmina (if available on your platform): Supports reconnection attempts for VNC. Alternatively, you can script TigerVNC to retry connections.
  3. Scripting Auto-Reconnect for TigerVNC: Create a shell script to monitor and reconnect the VNC session. Below is an example script for Linux-based systems (adapt for your client device if needed):



    #!/bin/bash
    
    VNC_SERVER="192.168.x.x:5901" 
    VNC_CLIENT="vncviewer"
    RETRY_INTERVAL=10
    
    while true; do
    ping -c 1 -W 2 $VNC_SERVER > /dev/null 2>&1
    if [ $? -eq 0 ]; then
    echo "VPN is up, attempting VNC connection..."
    $VNC_CLIENT $VNC_SERVER
    echo "VNC disconnected, retrying in $RETRY_INTERVAL seconds..."
    else
    echo "VPN is down, waiting for connection..."
    fi
    sleep $RETRY_INTERVAL
    done
    • Save this as vnc_reconnect.sh, make it executable (chmod +x vnc_reconnect.sh), and run it (./vnc_reconnect.sh).
    • Adjust VNC_SERVER to your server's IP and port.
    • The script checks if the VPN is connected by pinging the VNC server and attempts to reconnect if the connection drops.
  4. Run the Script in the Background (just for testing - temporary):

    • Use a terminal multiplexer like tmux or screen to keep the script running:
      tmux new -s vnc_session './vnc_reconnect.sh'
    • Detach from the session (Ctrl+B, D in tmux) to let it run in the background.
  5. Optimize VNC Server Settings:

    • On the CentOS 7.9 VNC server, ensure the TigerVNC server is running persistently. Edit the VNC service configuration (/etc/systemd/system/vncserver@.service) to restart on failure:
    • [Service]
      ...
      Restart=always
      RestartSec=10
    • Reload systemd and restart the service:


      sudo systemctl daemon-reload
      sudo systemctl restart vncserver@:1
  6. Handle Mobile Hotspot Stability:

    • If possible, use a mobile device with better signal stability or a dual-SIM phone to switch networks automatically.
    • Configure your VPN client to prioritize faster reconnection by reducing the ping-restart timeout in the OpenVPN configuration (e.g., ping-restart 10).
  7. Test and Monitor:

    • Test the script by simulating network drops (e.g., disable/enable the mobile hotspot).
    • Monitor logs on the VNC server (/var/log/vncserver*.log) and client for errors.

Example:

Dear Sir,

Please save the following script to reconnect vnc


Step 1/3: shell script to retrying
copy the following script to /usr/local/bin/vnc-reconnect.sh
----------------------------------------------------
#!/bin/bash

# Following is the jyeshtha's IP
VNC_SERVER="192.168.110.101:5901" 
VNC_CLIENT="vncviewer"
RETRY_INTERVAL=10

while true; do
ping -c 1 -W 2 $VNC_SERVER > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "VPN is up; attempting VNC connection ..."

# Sir, if you have any specific parameters please include them below
$VNC_CLIENT $VNC_SERVER
echo "VNC disconnected, retrying in $RETRY_INTERVAL seconds..."
else
echo "VPN is down, waiting for connection ..."
fi
sleep $RETRY_INTERVAL
done
-----------------------------------------------------

please give execute permission as given below

chmod +x /usr/local/bin/vnc-reconnect.sh

Step 2/3: service daemon configuration

please create the file - /etc/systemd/system/vnc-reconnect.service and copy the following contents
-----------------------------------------------------------
[Unit]
Description=VNC Reconnect Service
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/usr/local/bin/vnc-reconnect.sh
Restart=always
RestartSec=10
User=<username>
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/<username>/.Xauthority

[Install]
WantedBy=multi-user.target
-----------------------------------------------------------


Step 3/3: after doing both 1/2 and 2/2 steps; please run the following:
sudo systemctl daemon-reload
sudo systemctl enable vnc-reconnect.service
sudo systemctl start vnc-reconnect.service

sudo systemctl status vnc-reconnect.service

for logs:
journalctl -u vnc-reconnect.service -b