LinuxLudus: Nuovo script perl per eseguire 'ica' (demone ITALC)
Valerio Pachera
sirio81@gmail.com
Mer 5 Dic 2007 09:20:36 CET
Ho modificato lo script per l'esecuzione di "ica" in modo da importare
un'altra variabile d'ambiente per ricavare l'IP del thin clinet (TC).
Riporto la bozza dello script (più discorsiva e capibile) e poi lo
script vero e proprio (non ancora testato).
Mi dite cosa ne pensate?
---BOZZA---
SCOPO DELLO SCRIPT
lanciare il demone ica su una porta diversa per ogni thin client.
Il calcolo della porta avviene sommando 11000 alla parte finale
dell'IP del thin client.
Se lo script viene lanciato sul server,
si usano le porte dichiarate ad inizio script
my $isdport = 5800;
my $ivsport = 11000;
La variabile perl $display sarà uguale alla
variabile d'ambiente $DISPLAY.
Essendo lanciato sul serve, il contenuto della variabile
sarà ':0.0' (niente hostname).
Se lo script viene lanciato sul TC
la variabile d'ambiente $DISPLAY non mostra l'hostname del thinclient ma
mostra la sessione X ('localhsot:10.0' ad esempio) quindi non può essere
usata per ricavare l'IP. Dovrebbe invece andare bene per l'esecuzione di ica
visto che sul mio TC ha funzionato.
La variabile d'ambiente $ESPEAKER mostra l'IP del TC seguito da una porta
che non ci interessa (es: '192.168.0.10:16001').
Tramite l'uso di espressioni regolari possiamo ottenere la parte finale
dell'IP (inserito nella variabile $address), partendo dalla
variabile $ESPEAKER e
poi sommandola alle porte base.
my $IVSBASEPORT = 11000;
my $ISDBASEPORT = 11400;
$ivsport = $IVSBASEPORT+$address;
$isdport = $ISDBASEPORT+$address;
#Finally start ICA:
system("/usr/bin/ica -noshm -ivsport $ivsport -isdport $isdport
-display $displayname &");
---/BOZZA---
---SCRIPT BETA---
#!/usr/bin/perl -w
use Socket;
use strict;
#Dichiaro i valori di default delle variabili, usati
#nel caso in cui lo script venga eseguito sul server.
my $isdport = 5800;
my $ivsport = 11000;
#Importo la varibile d'ambiente
my $display = $ENV{'DISPLAY'};
#Elaboro la variabile importata togliendo
#tutto quello che c'è dopo i ':' compresi
my $hostname = $display ;
$hostname =~s/:[^:]*$//;
#la variabile $hostname è vuota se lo script
#è stato lanciato sul server. Non viene usata per altri scopi.
if (length($hostname) > 0) {
#importo la variabile d'ambiente che contiene l'IP.
my $address = $ENV{'ESPEAKER'};
$address =~s/:[^:]*$//;
#prendo la parte finale dell'IP
$address =~ s/(\d*).(\d*).(\d*).(\d*)/$4/;
my $IVSBASEPORT = 11000;
my $ISDBASEPORT = 11400;
$ivsport = $IVSBASEPORT+$address;
$isdport = $ISDBASEPORT+$address;
}
#Finally start ICA:
system("/usr/bin/ica -noshm -ivsport $ivsport -isdport $isdport
-display $display &");
---/SCRIPT BETA---
Maggiori informazioni sulla lista
linuxludus