Subject: Bug#487: "xmodmap failed to start" error

From: Nimesh Jethwa <[email-masked]>
Date: Tue, 05 Apr 2016 13:44:48 -0400

When connecting to a X2Go session using the latest release (4.0.5.1) on
Mac OS 10.11, the client displays a dialog box with error message
"xmodmap failed to start". Attached is a picture of the error message.

It seems like the search path does not include '/usr/X11/bin' or
'/opt/X11/bin' which indeed does have the xmodmap binary.

Some debug -

1) Executing 'echo $PATH' in the terminal displays
'/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin'

2) Below is a snippet of 'launchctl procinfo <x2go_pid>' when opening
the app from Launchpad.
        inherited environment = {
                DISPLAY
=> /private/tmp/com.apple.launchd.jbbgc0SnWW/org.macosforge.xquartz:0
                SSH_AUTH_SOCK
=> /private/tmp/com.apple.launchd.iQM7MSzyBK/Listeners
                Apple_PubSub_Socket_Render
=> /private/tmp/com.apple.launchd.FBStbBeusm/Render
        }

        default environment = {
                PATH => /usr/bin:/bin:/usr/sbin:/sbin
        }

        environment = {
                USER => zc
                COMMAND_MODE => unix2003
                LOGNAME => zc
                PATH => /usr/bin:/bin:/usr/sbin:/sbin
                DISPLAY
=> /private/tmp/com.apple.launchd.jbbgc0SnWW/org.macosforge.xquartz:0
                Apple_PubSub_Socket_Render
=> /private/tmp/com.apple.launchd.FBStbBeusm/Render
                SSH_AUTH_SOCK
=> /private/tmp/com.apple.launchd.iQM7MSzyBK/Listeners
                SHELL => /bin/bash
                HOME => /Users/zc
                TMPDIR
=> /var/folders/dr/ylvdtkpd2rv2qkfclsw7y06r0000gn/T/
                __CF_USER_TEXT_ENCODING => 0x1F5:0x0:0x0
                XPC_SERVICE_NAME =>
com.apple.xpc.launchd.oneshot.0x10000006.x2goclient
        }

3) Executing 'launchctl setenv
PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin' in the
terminal, followed by opening the app from Launchpad, procinfo shows -
        inherited environment = {
                PATH
=> /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin
                DISPLAY
=> /private/tmp/com.apple.launchd.jbbgc0SnWW/org.macosforge.xquartz:0
                SSH_AUTH_SOCK
=> /private/tmp/com.apple.launchd.iQM7MSzyBK/Listeners
                Apple_PubSub_Socket_Render
=> /private/tmp/com.apple.launchd.FBStbBeusm/Render
        }

        default environment = {
                PATH => /usr/bin:/bin:/usr/sbin:/sbin
        }

        environment = {
                USER => zc
                COMMAND_MODE => unix2003
                LOGNAME => zc
                PATH => /usr/bin:/bin:/usr/sbin:/sbin
                DISPLAY
=> /private/tmp/com.apple.launchd.jbbgc0SnWW/org.macosforge.xquartz:0
                Apple_PubSub_Socket_Render
=> /private/tmp/com.apple.launchd.FBStbBeusm/Render
                SSH_AUTH_SOCK
=> /private/tmp/com.apple.launchd.iQM7MSzyBK/Listeners
                SHELL => /bin/bash
                HOME => /Users/zc
                TMPDIR
=> /var/folders/dr/ylvdtkpd2rv2qkfclsw7y06r0000gn/T/
                __CF_USER_TEXT_ENCODING => 0x1F5:0x0:0x0
                XPC_SERVICE_NAME =>
com.apple.xpc.launchd.oneshot.0x10000007.x2goclient
        }

4) Opening the app using terminal by executing 'open
-n /Applications/x2goclient.app'
        inherited environment = {
                DISPLAY
=> /private/tmp/com.apple.launchd.8PPy9QYAsk/org.macosforge.xquartz:0
                SSH_AUTH_SOCK
=> /private/tmp/com.apple.launchd.WjqkY6s8Nu/Listeners
                Apple_PubSub_Socket_Render
=> /private/tmp/com.apple.launchd.foKIWVipU9/Render
        }

        default environment = {
                PATH => /usr/bin:/bin:/usr/sbin:/sbin
        }

        environment = {
                PWD => /Users/zc
                USER => zc
                SECURITYSESSIONID => 186a7
                LANG => en_CA.UTF-8
                COMMAND_MODE => unix2003
                TERM => xterm-256color
                PATH
=> /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin
                LOGNAME => zc
                DISPLAY
=> /private/tmp/com.apple.launchd.8PPy9QYAsk/org.macosforge.xquartz:0
                Apple_PubSub_Socket_Render
=> /private/tmp/com.apple.launchd.foKIWVipU9/Render
                TERM_PROGRAM_VERSION => 361
                TERM_SESSION_ID => BAFCF5E5-BAA0-4415-AF96-FEBA6619784E
                SSH_AUTH_SOCK
=> /private/tmp/com.apple.launchd.WjqkY6s8Nu/Listeners
                SHLVL => 1
                SHELL => /bin/bash
                HOME => /Users/zc
                _ => /usr/bin/open
                TERM_PROGRAM => Apple_Terminal
                TMPDIR
=> /var/folders/dr/ylvdtkpd2rv2qkfclsw7y06r0000gn/T/
                __CF_USER_TEXT_ENCODING => 0x1F5:0x0:0x0
                XPC_SERVICE_NAME =>
com.apple.xpc.launchd.oneshot.0x10000006.x2goclient
        }

===

Basically, the correct path is set only when the app is opened via the
terminal. If the user decides to hit 'OK' to the dialog box, then the
x2go session is terminated, but if he decides to leave it unattended,
then the user can continue using his session.

I'm not sure what the fix would be here. Do we leave it on the user to
fix his default path settings even though 'echo $PATH' shows it is set
to the right path? Or, in the code, we hard code the path to 
"/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin:/opt/X11/bin", regardless of what the env variable is set to?

Thanks,
Nimesh