Carnegie Mellon
SCS logo
Computer Science Department
home
syllabus
staff
schedule
lecture
projects
homeworks
 
 

15-410 VNC Documentation


Motivation

During late 2025, the traditional advice for macOS users (which had been: "use XQuartz") began to decay in utility, because something about the new window system for macOS 26 "Tahoe" caused problems with XQuartz, which seemed similar to Issue #438 and Issue #450. But also Issue #436 seemed disquieting.

"Virtual Andrew" is one approach, but VNC can be used as well.

Approach

The approach we are documenting is similar to the traditional "X forwarding over SSH" approach, but it should work if the machine doesn't have a working X server. Instead of forwarding X over SSH, we will forward the "virtual frame buffer" protocol defined by the VNC project at Olivetti Research in the 1990's. Simics on an Andrew Linux server will draw on a virtual X display; on your machine, an SSH client will be invoked to proxy a local TCP port to a Unix-domain socket on that Andrew Linux server; and then a VNC client on your machine will connect to that local proxy port.

Implementation

macOS

  1. Copy 410vnc_proxy onto your machine:

    mkdir -m 0700 -p $HOME/bin
    scp -p de0u@linux.andrew.cmu.edu:410/bin/410vnc_proxy $HOME/bin
    
    Replace "de0u" with your Andrew username! Note that this may require use of a VPN client.

  2. SSH into LINUX.ANDREW.CMU.EDU. Note that this may require use of a VPN client.

  3. On the LINUX.ANDREW server, type hostname and remember the name of this specific machine that was chosen for you at random.

  4. On the LINUX.ANDREW server, run 410vnc_setup and follow the directions.

  5. On your Mac, run:

    ~/bin/410vnc_proxy de0u linux-99.andrew.cmu.edu
    

    Replace "de0u" with your Andrew username and replace "linux-99" with the specific server name determined above.

    This will not appear to do much, but keep it running, because it is the proxy service. Again note that this may require use of a VPN client.

  6. On your Mac, tap on the Finder icon in your dock and then invoke Command-K (or the "Go", "Connect to Server..." menu item), then connect to vnc://localhost:5901.

  7. Hopefully you will be prompted for a password; enter the low-quality password chosen earlier.

  8. See Usage below.

  9. In the future it is not necessary to repeat the steps of 410vnc_setup and determining a specific LINUX.ANDREW server. On your client machine, start up 410vnc_proxy and then use the Finder to launch the VNC client. Use a VPN client as appropriate.

Windows

  1. Note that in order to launch a program downloaded from the Internet, it may be necessary to use the "Unblock-File cmdlet".

  2. Note that all of this relies on PowerShell (the modern "PowerShell", version 7 or higher, sometimes known as "PowerShell Core", not the old "Windows PowerShell", such as version 5.1). Here is information on obtaining PowerShell on Windows.

  3. Install a VNC client. Success has been reported with TightVNC. If you do use TightVNC, it may be best to select a "Custom" installation and choose "Entire feature will be unavailable" for the "TightVNC Server" component.

  4. Copy 410vnc_proxy.ps1 onto your machine:

    scp de0u@linux.andrew.cmu.edu:410/bin/410vnc_proxy.ps1 .
    
    Replace "de0u" with your Andrew username! Note that this may require use of a VPN client.

  5. SSH into LINUX.ANDREW.CMU.EDU. Note that this may require use of a VPN client.

  6. On the LINUX.ANDREW server, type hostname and remember the name of this specific machine that was chosen for you at random.

  7. On the LINUX.ANDREW server, run 410vnc_setup and follow the directions.

  8. On your machine, run:

    .\410vnc_proxy.ps1 de0u linux-99.andrew.cmu.edu
    

    Replace "de0u" with your Andrew username and replace "linux-99" with the specific server name determined above.

    This will not appear to do much, but keep it running, because it is the proxy service. Again note that this may require use of a VPN client.

  9. Launch the TightVNC client, then connect to localhost::5901.

  10. Hopefully you will be prompted for a password; enter the low-quality password chosen earlier.

  11. See Usage below.

  12. In the future it is not necessary to repeat the steps of 410vnc_setup and determining a specific LINUX.ANDREW server. On your client machine, start up the 410vnc_proxy PowerShell script, then launch the VNC client. Use a VPN client as appropriate.

Ubuntu

  1. Install a VNC client, for example the VNC Viewer of TightVNC:

    $ sudo apt-get install xtightvncviewer
    

  2. Copy 410vnc_proxy onto your machine:

    mkdir -m 0700 -p $HOME/bin
    scp -p de0u@linux.andrew.cmu.edu:410/bin/410vnc_proxy $HOME/bin
    
    Replace "de0u" with your Andrew username! Note that this may require use of a VPN client. If not already, edit your .bashrc or whatever to permanently place $HOME/bin on $PATH.

  3. SSH into LINUX.ANDREW.CMU.EDU. Note that this may require use of a VPN client.

  4. On the LINUX.ANDREW server, type hostname and remember the name of this specific machine that was chosen for you at random.

  5. On the LINUX.ANDREW server, run 410vnc_setup and follow the directions.

  6. On your Linux machine, run:

    ~/bin/410vnc_proxy de0u linux-99.andrew.cmu.edu
    

    Replace "de0u" with your Andrew username and replace "linux-99" with the specific server name determined above.

    This will not appear to do much, but keep it running, because it is the proxy service. Again note that this may require use of a VPN client.

  7. On your Linux machine,

    $ vncviewer :1
    

  8. Hopefully you will be prompted for a password; enter the low-quality password chosen earlier.

  9. See Usage below.

  10. In the future it is not necessary to repeat the steps of 410vnc_setup and determining a specific LINUX.ANDREW server. On your client machine, start up 410vnc_proxy and then use the Finder to launch the VNC client. Use a VPN client as appropriate.

Usage

  1. If you end up with a desktop that has a quirky background image of gigantic penguin skyscrapers surrounding the Earth, probably a good way to get a terminal window is to click at the lower left of the screen and choose either "urxvt" or "urxvt (login shell)".

  2. When you're done, if you click on the button at the lower left and pick "Logout", that should clean up processes running on the Andrew Linux server and kill off the proxy. Then you can disconnect your VNC client.

  3. Going forward, it is best to continue using the same LINUX.ANDREW machine that was randomly chosen for you the first time.

Notes

You can add parameters to end of the 410vnc_proxy command line. Examples follow.

-geometry 1024x768
This can be used to specify the size of the virtual desktop.

[Last modified Thursday February 05, 2026]