X
52 Rate this article:
No rating

[INTERNAL] Script de lancement automatique du X11 lors du lancement d'un terminal.

Help Article Update 3

Anonym

Une de nos clientes a écrit un script pour lancer automatiquement le X11 lors du lancement d'une session via un terminal.

Elle avait besoin d'un tel script car elle travaillait sur un serveur MAC via une connexion à distance pour lancer des codes IDL à partir d'un script C-shell et de la commande contrab.

Le problème était que le X11 n'était jamais démarré dans la session terminal et donc les codes IDL ne se lançaient pas et renvoyaient l'erreur suivante :

% DEVICE: Unable to connect to X Windows display: :0.0
% DEVICE: Unable to open X Windows display.
Is your DISPLAY environment variable set correctly?


Note: the display was set to 0.0 in the C-shell script.

Vous trouverez ci dessous un script permettant de contouner ce probleme. Ce script a été écrit par la cliente qui nous l'a ensuite envoyé.

1. Step 1: Construire un script pour lancer automatiquement le X11 lors du lancement d'une session terminal sur le serveur. Cela peut se faire en ajoutant les lignes suivantes dans le fichier .cshrc de l'utilisateur.


################## X11 automatic launch####################
if ($?prompt) then

set CHECK_INTERACTIVE = "true"

### Report Unix and shell versions
set PLATFORM_UNIX_REPORT = `uname -a | awk '{print $17, $1, $3, $9"-"$10}'`
set SHELL_REPORT = `echo $version | awk '{ print $1, $2, $4}'`
set DARWIN_VERSION = `uname -a | awk '{print substr($3, 1, 1)}'`
set DARWIN_YEAR = `uname -a | awk '{print substr($13, 1, 4)}'`

### Check if Apple X11 open, launch if not
### For console login only, must skip remote sessions
### Have to check Darwin version for default location of X11.app
### sleep 0.25 = need to give system a little time to execute open command

if ( $?REMOTEHOST || $?SSH_TTY) then
goto x11_bypass
else
set X11DISP = `/bin/ps -xw -o command | grep Xauthority | grep $USER | awk '{print substr($5, 2, 1)}'`
if ( $X11DISP == "" ) then
if ( $DARWIN_VERSION >= 7 && -e /Applications/Utilities/X11.app ) then
set X11APP = "/Applications/Utilities/X11.app"
else if ( $DARWIN_VERSION < 7 && -e /Applications/X11.app ) then
set X11APP = "/Applications/X11.app"
else
echo "|== ***ERROR*** == Apple X11 not found in its default Darwin $DARWIN_VERSION location"
unset X11APP
endif
else
setenv DISPLAY :$X11DISP.0
endif
endif

if ( $?X11APP ) then
open $X11APP
sleep 0.25
set X11DISP = `/bin/ps -xw -o command | grep Xauthority | grep $USER | awk '{print substr($5, 2, 1)}'`
setenv DISPLAY :$X11DISP.0
unset X11APP
osascript -e 'tell application "Terminal"' -e 'activate' -e 'end tell'
endif

x11_bypass:

else
set CHECK_INTERACTIVE = "false"
endif


test -r /sw/bin/init.csh && source /sw/bin/init.csh
#####################################



2. Step 2: Se connecter au serveur via une connection remote desktop. Le X11 se lance automatiquement à partir du script précédent.
 

3. Step 3: Lancer le script C-shell pour faire tourner les codes IDL voulus.