I needed something to tell me what VNC server (vncserver()) instances were running, and on which DISPLAY ports, and with what resolution(s) (geometry), so I wrote one. Here is the HTMLized Perl source code:
#!/usr/bin/perl -w ###################################################################### ## FILE: findvncport.pl ## DESC: display information about VNC server instances ## VERS: 01 ## DATE: 2009-05-13 ## AUTH: pdw@thesoftwaremaster.com ############################################################################## ## USAGE NOTES: ## ## This is a script to find out the connection port number and screen ## geometry of any VNC server instances currently running on a host. ## ## This functionality is most useful to a user who needs to know what VNC ## server instance(s) is(are) running, and on what port(s) - E.G. at logon ## (to a shell) time when a vncserver has been left running. ## ## For convenience, the geometry of the X interface, the PID of Xvnc (the ## actual X server invoked by vncserver), and such other info as we can ## glean from the process listing on the host. ## ## Note that this script only returns information about VNC instances ## running under the UID of the user who runs the script. The value of ## the environment variable $USER is used to filter the process listing. ## The user's $UID value is displayed, but is not used. ## ## This program is designed to be run on a remote, ssh-accessible host ## computer during the login and user account initialization process. ## ## EXAMPLE: ## ## I place this script in the .bash_login shell script that runs at user ## login. ## ## ## _TODO_: there is no buglist, yet, but there are some things need done to ## this script right to begin with (i.e. the functionality is ## marginal, and will almost certainly "break" the first time someone ## tries to use it on some other platform or environment. First on ## the list of things to do must be: Fix the regular expression ## parsing which finds the data in the process listing. As the code ## is now, these regex statements will break e.g. if the Xvnc command ## line doesn't look like it expects. 2nd on the list has to be the ## addtion of command line parameters to modify the output of the ## script. :_TODO_ ## ############################################################################# ## REVISION HISTORY: ## ## 01: 2009-05-13 pdw ## Initial version ## ############################################################################# ## ## Load up some environmental info... $curruid = `echo \$UID`; $curruser = `echo \$USER`; @processes = `ps x -u \$USER`; chomp($curruid); chomp($curruser); ## @displays gets the data about whatever VNC displays are running @displays = (); while ($_ = shift(@processes)) { my $d = {}; my $found = 0; chomp; next unless ($_); next unless (/^\s*(\d+).+Xvnc\s*(\:\d+)/) && ( $display = $2, $vncpid = $1 ); # get desktop m/-desktop(.+)-httpd/ && ($desktop = $1); m/-geometry\s+(\d+x\d+)/ && ( $geometry = $1 ); m/-depth\s+(\d+)/ && ( $depth = $1 ); $d = { 'Display' => $display, 'VNC PID' => $vncpid, 'Desktop' => $desktop, 'Geometry' => $geometry, 'Depth' => $depth, }; push(@displays, $d); } ## Display what we found out print "VNC server info for USER \'$curruser\':\n"; if (scalar(@displays)) { foreach my $disp (@displays) { foreach my $k (keys(%$disp)) { print" $k: \t".$disp->{$k}."\n"; } } } else { print " VNC server not found in process listing. "; }