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