in reply to Like to modify /usr/bin/vncserver to parse a config file

That script looks to be written in a quite old style of Perl, and it doesn't make use of any standard modules where it could, and could take a lot of clean up work to bring it up to modern standards. Sure, it could be modified*, but it might not hurt to take a step back:

The goal is to avoid using switches when invoking /usr/bin/vncserver

Are you sure that's the easiest solution to the problem (which you haven't described)? It requires you to maintain a patched version of a script you don't fully understand. Why not just write a small wrapper shell script around vncserver?

#!/bin/sh /usr/bin/vncserver -geometry 2000x1200 # ... etc

* Quick & dirty example (requires Config::Tiny):

use Config::Tiny; my $cfg = Config::Tiny->read("$ENV{HOME}/.vnc/config"); $geometry = $cfg->{_}{geometry} if exists $cfg->{_}{geometry};

Just enough rope ;)

Replies are listed 'Best First'.
Re^2: Like to modify /usr/bin/vncserver to parse a config file
by gsky (Initiate) on Oct 13, 2015 at 15:07 UTC

    Thank you for the reply. I should have mentioned that I would like to submit a pull request upstream (to the proper tigervnc server project) to enable that script to find a parse out the config file. It is needed for another submission: a systemd user service which I have already written.

    For the user service to be general, any standard options (switches) should be captured in the config file so that they are not hard-coded into the service itself. Minimum needs: Check for $HOMEDIR/.vnc/config and source it, parse it, and use the options therein in the call to Xvnc as they do in their script.

      Check for $HOMEDIR/.vnc/config

      This should get your started:

      use Config::Tiny; my $CONFIGFILE = "$ENV{HOME}/.vnc/config"; if (-f $CONFIGFILE) { my $cfg = Config::Tiny->read($CONFIGFILE); $geometry = $cfg->{_}{geometry} if exists $cfg->{_}{geometry}; # ... etc. }