# Pour les scripts : c'est ici

**URL:** <https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820>\
**Category:** Trucs et Astuces\
**Created:** [Février 20, 2016, 12:53 UTC](https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820 "2016-02-20T12:53:11Z")\
**Posts on this page:** 20\
**Page:** 4

<div class="post-metadata">

**Author:** ![rsuinux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/rsuinux/32/4554_2.png) [@rsuinux](https://www.debian-fr.org/u/rsuinux)\
**Post date:** [Février 20, 2016, 4:37 UTC](https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820/61 "2016-02-20T16:37:01Z")

</div>

bonjour;  
Nouveau venu ici, voici une petite contribution: c’est un script qui permet d’écouter mes radios favorite via mplayer. Ce script demande de cliker sur la radio, puis lance mplayer. Il y manque un test de reconnexion en cas de perte du flux.ainsi qu’un bouton d’arret.

```auto
#!/usr/bin/perl -w
# ---------------------------------------
# interface perl & tk pour l'écoute
# d'une radio via internet
# ---------------------------------------
# R. Suinot (rsuinux@gmx.fr)
# le 13/03/2004 / Rev° 15/03/2004
# ---------------------------------------
# historique:
# -> 15/03/2004:
# - chargement d'un fichier de radio
# A faire?
# -> 
# - gestion des erreurs du playeur (mplayer ou xmms)
# et/ou couper le playeur si processus deja en cours.
# -> 
# - tester le numéro de port et/ou adresse internet
# -> 
# - gestion des options (fichier des radios, ...)
# ->
# - gerer le flux rtsp de la freebox?
# ---------------------------------------
use strict;
use Tk;
use Tk::widgets qw/ Dialog ROText /;

my $UPDATED = '15 Mars 2004';
my $FONT = '-*-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*';
my $ERROR_TXT="Erreur de type inconnue";

my $fichier="/home/admin/bin/radio.lst";
&charge_fichier_liste_radio();
my @radio;
my @adresse;

my $titre="Selecteur de radio ";

my $mw = MainWindow->new;
$mw->title($titre);

my $lookup_frame = $mw->Frame()->pack(-expand => '1', -fill => 'both', -side => 'top');

#-- boite d'erreur
my $dialog_err = $mw->Dialog(
                      -title => 'ERREUR(s)',
                      -bitmap => 'error',
                      -default_button => ['Ok'],
                      -textvariable => \$ERROR_TXT
                     );
$dialog_err -> resizable(0, 0);

#-- boite About
my $help = $mw->Dialog(
                -title => 'About',
                -bitmap => 'questhead',
                -default_button => 'OK',
                -buttons => ['OK'],
                -font => $FONT,
                -text => "Radio-Net\n" . "La radio via Internet \n" .
                                   "necessite mplayer et ses divers drivers.\n" .
                                   "remi\@suinot.org\n". "(updated $UPDATED)\n\n" .
                                   "Tk version $Tk::VERSION"
               );
$help->resizable(0, 0);

#-- bouton About
my $about = $lookup_frame->Button(
                           -text => 'About',
                           -command => [$help => 'Show']
                           )->pack(-side => 'left', -expand => '1', -fill => 'both');

#-- bouton Exit
my $exit = $lookup_frame->Button(
                          -text => 'Exit',
                          -cursor => 'hand1',
                          -activeforeground => 'red',
                          -command => sub { exit; }
                          )->pack(-side => 'left', -expand => '1', -fill => 'both');
 
# -- nouvelle frame pour la liste des radio
my $liste_radio = $mw->Frame()->pack(-side => 'left', -expand => '1', -fill => 'both');

$liste_radio->Label(-text=> "\n Choisissez votre radio! \n")->pack(-side => 'top');
my $i=0;
my $j=0;
my $result=-1;
foreach $i (@radio ){
    $j++;
    $liste_radio->Radiobutton(
                  -text => $i,
                  -variable => \$result,
                  -value => $j
                 )->pack( -side => 'top');
}

# -- bouton Ecouter!
my $execute = $liste_radio->Button(
                            -text => 'Ecoutez!',
                            -background => 'cyan',
                            -foreground => 'blue',
                            -borderwidth => 1,
                            -relief => 'ridge',
                            -highlightthickness => 0,
                            -command => \&ecoutez
                           )->pack(-side => 'bottom');
                                                                                                                                                       
MainLoop;

#-------------- Fonctions -------------------------
sub ecoutez {

  print "valeur de sortie: $result \n";

  if ( $result == 1) {
     print "$result: $adresse[0]";
     exec "mplayer -slave $adresse[0]";
  } elsif ( $result == 2) {
     print "$result: $adresse[1]\n";
     exec "mplayer -slave $adresse[1]";
  } elsif ( $result == 3) {
     print "$result: $adresse[2]\n";
     exec "mplayer -slave $adresse[2]";
  } elsif ( $result == 4) {
     print "$result: $adresse[3]\n";
     exec "mplayer -slave $adresse[3]";
  } elsif ( $result == 5) {
     print "$result: $adresse[4]\n";
     exec "mplayer -slave $adresse[4]";
  } elsif ( $result == 6) {
     print "$result: $adresse[5]\n";
     exec "mplayer -slave $adresse[5]";
  } elsif ( $result == 7) {
     print "$result: $adresse[6]\n";
     exec "mplayer -slave $adresse[6]";
  } elsif ( $result == 8) {
     print "$result: $adresse[7]\n";
     exec "mplayer -slave $adresse[7]";
  } elsif ( $result == -1) {
    $ERROR_TXT="Vous n'avez rien séctionneé!!!\n Réfléchissez un peu!";
    $dialog_err->Show;
  } else {
    $ERROR_TXT="Erreur de type inconnue...!!!\n";
    $dialog_err->Show;
  }

}

sub charge_fichier_liste_radio {
  my $i=0;
  my @tmp;
  open (FR, $fichier) or die "Fichier des radios non trouvé;.\n";
 
  while( <FR> ) {
    if ( $_ =~ /[#*]/ ) {
      # Un commentaire? On passe!
    } else {
      @tmp = split (/,/);
      $radio[$i] = $tmp[0] ;
      $adresse[$i] = $tmp[1];
      chomp($adresse[$i]);
      print "$i: $radio[$i] -> $adresse[$i]<\n";
      $i++;
    }
  }
  close FR;
}
```

et voici le fichier des radio:

```auto
FranceInter , http://viphttp.yacast.net/V4/radiofrance/franceinter_hd.m3u
FranceInfo , http://ogg.tv-radio.fr:1441/encoderfinfo.ogg
FranceCulture , http://viphttp.yacast.net/V4/radiofrance/franceculture_hd.m3u
FranceMusique , http://viphttp.yacast.net/V4/radiofrance/francemusique_hd.m3u
France Info , http://viphttp.yacast.net/V4/radiofrance/franceinfo_bd.m3u
FIP-TheBest!!! , http://viphttp.yacast.net/V4/radiofrance/fip_hd.m3u
LeMouv , http://viphttp.yacast.net/V4/radiofrance/lemouv_hd.m3u
Le Mouv , http://viphttp.yacast.net/V4/radiofrance/lemouv_hd.m3u
France Vivace , http://viphttp.yacast.net/V4/radiofrance/francevivace_hd.m3u
France Bleu Ile-de-France , http://viphttp.yacast.net/V4/radiofrance/francebleu_idf_hd.m3u
```

Rémi.

---

<div class="post-metadata">

**Author:** ![TinninE1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/c77e96/32.png) [@TinninE1](https://www.debian-fr.org/u/TinninE1)\
**Post date:** [Février 20, 2016, 4:37 UTC](https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820/62 "2016-02-20T16:37:09Z")

</div>

Bonsoir

escusez cette question de débutant.

Comment executer ce script de radio??

On l’enregistre dans un fichier sans extension ou il faut mettre .pl ?  
et apres comment l’executer ?

faut il compiler ?  
peux ton compiler ?

ps : Je code déja en delphi sous windows

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 4:37 UTC](https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820/63 "2016-02-20T16:37:09Z")

</div>

le "shell escape"`#!/usr/bin/perl -w `en première ligne suffit au shell pour savoir avec quoi ça s’execute.  
Quel que soit le suffixe (ou pas), il suffit donc de le rendre executable pour l’appeler ensuite.

---

<div class="post-metadata">

**Author:** ![TinninE1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/c77e96/32.png) [@TinninE1](https://www.debian-fr.org/u/TinninE1)\
**Post date:** [Février 20, 2016, 4:37 UTC](https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820/64 "2016-02-20T16:37:10Z")

</div>

> [@](#):
>
> le “shell escape”
> 
> ```auto
> #!/usr/bin/perl -w 
> ```
> 
> en première ligne suffit au shell pour savoir avec quoi ça s’execute.  
> Quel que soit le suffixe (ou pas), il suffit donc de le rendre executable pour l’appeler ensuite.

alors je prend le script du dessus, que je rend executable dans ses propriétées, je fait lancer et je test aussi lancer dans un terminal mais ça ne marche pas??

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 4:37 UTC](https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820/65 "2016-02-20T16:37:10Z")

</div>

Le chanban suffit normalement avec le positionnement du bit d’execution.  
Pour le lancer tu fais bien un :

```auto
./script
```

---

<div class="post-metadata">

**Author:** ![rsuinux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/rsuinux/32/4554_2.png) [@rsuinux](https://www.debian-fr.org/u/rsuinux)\
**Post date:** [Février 20, 2016, 4:37 UTC](https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820/66 "2016-02-20T16:37:10Z")

</div>

les droits sur mon script sont :

```nohighlight
-rwxr-xr-x 1 admin admin 5182 2007-09-09 21:15 Radio.pl

```

mais pour l’executer, il faut que le fichier des listes soit dans le même répertoire.  
Peut etre est-ce la l’erreur?

---

<div class="post-metadata">

**Author:** ![TinninE1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/c77e96/32.png) [@TinninE1](https://www.debian-fr.org/u/TinninE1)\
**Post date:** [Février 20, 2016, 4:37 UTC](https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820/67 "2016-02-20T16:37:14Z")

</div>

j’ai les meme droits que toi  
et j’ai aussi le fichier radio.lst dans le meme repertoire

---

<div class="post-metadata">

**Author:** ![rsuinux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/rsuinux/32/4554_2.png) [@rsuinux](https://www.debian-fr.org/u/rsuinux)\
**Post date:** [Février 20, 2016, 4:37 UTC](https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820/68 "2016-02-20T16:37:20Z")

</div>

Tu as quoi dans la console, quand tu l’execute?

---

<div class="post-metadata">

**Author:** ![TinninE1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/c77e96/32.png) [@TinninE1](https://www.debian-fr.org/u/TinninE1)\
**Post date:** [Février 20, 2016, 4:37 UTC](https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820/69 "2016-02-20T16:37:21Z")

</div>

ceci :

```auto
tinnine@madebian:~$ sh /home/tinnine/Desktop/Scripts/radio.pl
/home/tinnine/Desktop/Scripts/radio.pl: line 24: use: command not found
/home/tinnine/Desktop/Scripts/radio.pl: line 25: use: command not found
/home/tinnine/Desktop/Scripts/radio.pl: line 26: use: command not found
/home/tinnine/Desktop/Scripts/radio.pl: line 28: my: command not found
/home/tinnine/Desktop/Scripts/radio.pl: line 29: my: command not found
/home/tinnine/Desktop/Scripts/radio.pl: line 30: my: command not found
/home/tinnine/Desktop/Scripts/radio.pl: line 32: my: command not found
/home/tinnine/Desktop/Scripts/radio.pl: line 33: syntax error near unexpected to ken `&'
/home/tinnine/Desktop/Scripts/radio.pl: line 33: `&charge_fichier_liste_radio(); 
```

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 4:37 UTC](https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820/70 "2016-02-20T16:37:21Z")

</div>

C’est dommage de polluer ce fil, vous devriez aller dans la programmation ou le support…

---

<div class="post-metadata">

**Author:** ![TinninE1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/c77e96/32.png) [@TinninE1](https://www.debian-fr.org/u/TinninE1)\
**Post date:** [Février 20, 2016, 4:37 UTC](https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820/71 "2016-02-20T16:37:23Z")

</div>

Tu as raison.  
J’arrete de poluer ce poste ([voici le fil de ma question](http://forum.debian-fr.org/viewtopic.php?p=101907))

---

<div class="post-metadata">

**Author:** ![TinninE1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/c77e96/32.png) [@TinninE1](https://www.debian-fr.org/u/TinninE1)\
**Post date:** [Février 20, 2016, 4:37 UTC](https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820/72 "2016-02-20T16:37:26Z")

</div>

J’ai enfin résussi à executer ton script de radios 😉

Un fois la radio lancé, la fenêtre se ferme et on ne peux plus arretter la radio.

Ou peu etre n’ai je pas compris

---

<div class="post-metadata">

**Author:** ![rsuinux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/rsuinux/32/4554_2.png) [@rsuinux](https://www.debian-fr.org/u/rsuinux)\
**Post date:** [Février 20, 2016, 4:37 UTC](https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820/73 "2016-02-20T16:37:26Z")

</div>

c’est un petit problème que je contourne en lançant ca en console, puis en fermant la console pour couper la couenne de mplayer.  
Si tu as une meilleur idée, je suis premeur 🙂

---

<div class="post-metadata">

**Author:** ![TinninE1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/c77e96/32.png) [@TinninE1](https://www.debian-fr.org/u/TinninE1)\
**Post date:** [Février 20, 2016, 4:37 UTC](https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820/74 "2016-02-20T16:37:29Z")

</div>

Salut,

je viens de changer ceci dans ton script

```auto
#-- bouton Exit
my $exit = $lookup_frame->Button(
                          -text => 'Quitter',
                          -cursor => 'hand1',
                          -activeforeground => 'red',
                          -command => sub { exec "killall mplayer";
                                                      exit; }
                          )->pack(-side => 'left', -expand => '1', -fill => 'both');
```

Dans command j’ai rajouter un killall mplayer et ça fonctionne, mais faut cliquer sur quitter

voici quelques m3u : [zeho.free.fr/src/files/m3u/radio/FR/](http://zeho.free.fr/src/files/m3u/radio/FR/)

---

<div class="post-metadata">

**Author:** ![TinninE1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/c77e96/32.png) [@TinninE1](https://www.debian-fr.org/u/TinninE1)\
**Post date:** [Février 20, 2016, 4:37 UTC](https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820/75 "2016-02-20T16:37:35Z")

</div>

j’ai fait une petite modif dans le script pour écouter la radio

```auto
#!/usr/bin/perl -w
# ---------------------------------------
# interface perl & tk pour l'écoute
# d'une radio via internet
# ---------------------------------------
# R. Suinot (rsuinux@gmx.fr)
# le 13/03/2004 / Rev° 15/03/2004
# ---------------------------------------
# historique:
# -> 15/03/2004:
# - chargement d'un fichier de radio
# A faire?
# ->
# - gestion des erreurs du playeur (mplayer ou xmms)
# et/ou couper le playeur si processus deja en cours.
# ->
# - tester le numéro de port et/ou adresse internet
# ->
# - gestion des options (fichier des radios, ...)
# ->
# - gerer le flux rtsp de la freebox?
# ---------------------------------------
use strict;
use Tk;
use Tk::widgets qw/ Dialog ROText /;

my $UPDATED = '15 Mars 2004';
my $FONT = '-*-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*';
my $ERROR_TXT="Erreur de type inconnue";

my $fichier="./radio.lst";
&charge_fichier_liste_radio();
my @radio;
my @adresse;

my $titre="Selecteur de radio ";

my $mw = MainWindow->new;
$mw->title($titre);

my $lookup_frame = $mw->Frame()->pack(-expand => '1', -fill => 'both', -side => 'top');

#-- boite d'erreur
my $dialog_err = $mw->Dialog(
                      -title => 'ERREUR(s)',
                      -bitmap => 'error',
                      -default_button => ['Ok'],
                      -textvariable => \$ERROR_TXT
                     );
$dialog_err -> resizable(0, 0);

#-- boite About
my $help = $mw->Dialog(
                -title => 'a propos',
                -bitmap => 'questhead',
                -default_button => 'OK',
                -buttons => ['OK'],
                -font => $FONT,
                -text => "Radio-Net\n" . "La radio via Internet \n" .
                                   "necessite mplayer et ses divers drivers.\n" .
                                   "remi\@suinot.org\n". "(updated $UPDATED)\n\n" .
                                   "petite modif par TinninE\n\n".
                                   "Tk version $Tk::VERSION"
               );
$help->resizable(0, 0);

#-- bouton About
my $about = $lookup_frame->Button(
                           -text => 'a propos',
                           -command => [$help => 'Show']
                           )->pack(-side => 'left', -expand => '1', -fill => 'both');

#-- bouton Exit
my $exit = $lookup_frame->Button(
                          -text => 'Quitter',
                          -cursor => 'hand1',
                          -activeforeground => 'red',
                          -command => sub { exec "killall mplayer";
                                                      exit; }
                          )->pack(-side => 'left', -expand => '1', -fill => 'both');
 
# -- nouvelle frame pour la liste des radio
my $liste_radio = $mw->Frame()->pack(-side => 'left', -expand => '1', -fill => 'both');

$liste_radio->Label(-text=> "\n Choisissez votre radio! \n")->pack(-side => 'top');
my $i=0;
my $j=0;
my $result=-1;
foreach $i (@radio ){
    $j++;
    $liste_radio->Radiobutton(
                  -text => $i,
                  -variable => \$result,
                  -value => $j
                 )->pack( -side => 'top');
}

# -- bouton Ecouter!
my $execute = $liste_radio->Button(
                            -text => 'Ecoutez!',
                            -background => 'cyan',
                            -foreground => 'blue',
                            -borderwidth => 1,
                            -relief => 'ridge',
                            -highlightthickness => 0,
                            -command => \&ecoutez
                           )->pack(-side => 'bottom');
                                                                                                                                                       
MainLoop;

#-------------- Fonctions -------------------------
sub ecoutez {

  print "valeur de sortie: $result \n";
  
  if ( $result > 0) 
    {
     print "$result: $adresse[$result - 1]";
     exec "mplayer -slave $adresse[$result - 1]";
    }
  elsif ( $result == -1) 
    {
    $ERROR_TXT="Vous n'avez rien séctionneé!!!\n Réfléchissez un peu!";
    $dialog_err->Show;
    }
}

sub charge_fichier_liste_radio {
  my $i=0;
  my @tmp;
  open (FR, $fichier) or die "Fichier des radios non trouvé;.\n";
 
  while( <FR> ) {
    if ( $_ =~ /[#*]/ ) {
      # Un commentaire? On passe!
    } else {
      @tmp = split (/,/);
      $radio[$i] = $tmp[0] ;
      $adresse[$i] = $tmp[1];
      chomp($adresse[$i]);
      print "$i: $radio[$i] -> $adresse[$i]<\n";
      $i++;
    }
  }
  close FR;
} 
```

J’ai un peu alleger la function de lecture du lien et ajuter le killall mplayer quand on click sur quitter

---

<div class="post-metadata">

**Author:** ![rsuinux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/rsuinux/32/4554_2.png) [@rsuinux](https://www.debian-fr.org/u/rsuinux)\
**Post date:** [Février 20, 2016, 4:37 UTC](https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820/76 "2016-02-20T16:37:36Z")

</div>

je viens de tester. Mais comme la fenetre principal s’efface, on ne peux plus quitter sur exit.

Rémi.

ps: cela pollue t il le forum? Passer en forum programmation?

---

<div class="post-metadata">

**Author:** ![TinninE1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/c77e96/32.png) [@TinninE1](https://www.debian-fr.org/u/TinninE1)\
**Post date:** [Février 20, 2016, 4:37 UTC](https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820/77 "2016-02-20T16:37:36Z")

</div>

oui il faut relancer le script pour quitter ensuite

---

<div class="post-metadata">

**Author:** ![rsuinux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/rsuinux/32/4554_2.png) [@rsuinux](https://www.debian-fr.org/u/rsuinux)\
**Post date:** [Février 20, 2016, 4:39 UTC](https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820/78 "2016-02-20T16:39:14Z")

</div>

je reviens avec mon script des radio…

D’abord, j’ai enlevé le switch ‘-slave’ pour mplayer, et je lance ce script en console (parametre de gnome dans la barre du tableau de bord). Cela permet de couper mplayer avec la touche ‘q’.  
C’est déjà mieux.  
Mais j’ai fait mieux!!! Si si!  
j’y ai rajouté la télé via [tv.freebox.fr](http://tv.freebox.fr). C’est un flux video de petite taille. Mais je ne sais pas si c’est réservé ou non pour les abonné [free.fr](http://free.fr). En tout cas, ça passe chez moi (je suis chez free). J’utilise vlc pour lire le flux video. Il a donc fallut modifier le fichier des flux:

```auto
0, FranceInter , http://viphttp.yacast.net/V4/radiofrance/franceinter_hd.m3u
0, FranceInfo , http://ogg.tv-radio.fr:1441/encoderfinfo.ogg
0, FranceCulture , http://viphttp.yacast.net/V4/radiofrance/franceculture_hd.m3u
0, FranceMusique , http://viphttp.yacast.net/V4/radiofrance/francemusique_hd.m3u
0, France Info , http://viphttp.yacast.net/V4/radiofrance/franceinfo_bd.m3u
0, FIP-TheBest!!! , http://viphttp.yacast.net/V4/radiofrance/fip_hd.m3u
0, LeMouv , http://viphttp.yacast.net/V4/radiofrance/lemouv_hd.m3u
0, Le Mouv , http://viphttp.yacast.net/V4/radiofrance/lemouv_hd.m3u
0, France Vivace , http://viphttp.yacast.net/V4/radiofrance/francevivace_hd.m3u
0, France Bleu Ile-de-France , http://viphttp.yacast.net/V4/radiofrance/francebleu_idf_hd.m3u
1, France 2 , http://tv.freebox.fr/stream_france2
1, France 3 , http://tv.freebox.fr/stream_france3
1, France 4 , http://tv.freebox.fr/stream_france4
1, France 5 , http://tv.freebox.fr/stream_france5
1, Arte , http://tv.freebox.fr/stream_arte
1, Direct 8 , http://tv.freebox.fr/stream_direct8
1, NT 1 , http://tv.freebox.fr/stream_nt1
1, NRJ 12 , http://tv.freebox.fr/stream_nrj12
1, LCP , http://tv.freebox.fr/stream_lcp
1, BFM , http://tv.freebox.fr/stream_bfmtv
1, TV 5 , http://tv.freebox.fr/stream_tv5
1, France O , http://tv.freebox.fr/stream_franceo
1, ALjazeera , http://tv.freebox.fr/stream_aljazeera
```

et voici le code perl? bah, le voilà:

```auto
#!/usr/bin/perl -w
# ---------------------------------------
# interface perl & tk pour l'ecoute
# d'une radio via internet
# ou d'une tele via internet
# ---------------------------------------
# R. Suinot (rsuinux@gmx.fr)
# le 13/03/2004 / Rev. 30/10/2007
# ---------------------------------------
# historique:
# -> 15/03/2004:
# - chargement d'un fichier de radio
# -> 
# - gestion des erreurs du playeur (mplayer ou xmms)
# et/ou couper le playeur si processus deja en cours.
# -> 
# - tester le numero de port et/ou adresse internet
# -> 
# - gestion des options (fichier des radios, ...)
#
# ---------------------------------------
use strict;
use Tk;
use Tk::widgets qw/ Dialog ROText /;

my $UPDATED = '30 Oct. 2007';
my $FONT = '-*-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*';
my $ERROR_TXT="Erreur de type inconnue";

my $fichier="/home/admin/bin/radio.lst";
&charge_fichier_liste_radio();
my @lect;
my @radio;
my @adresse;

my $titre="Selecteur de radio ";

my $mw = MainWindow->new;
$mw->title($titre);

my $lookup_frame = $mw->Frame()->pack(-expand => '1', -fill => 'both', -side => 'top');

my @lecteur;
$lecteur[0] ="mplayer";
$lecteur[1] ="vlc";

#-- boite d'erreur
my $dialog_err = $mw->Dialog(
                      -title => 'ERREUR(s)',
                      -bitmap => 'error',
                      -default_button => ['Ok'],
                      -textvariable => \$ERROR_TXT
                     );
$dialog_err -> resizable(0, 0);

#-- boite About
my $help = $mw->Dialog(
                -title => 'About',
                -bitmap => 'questhead',
                -default_button => 'OK',
                -buttons => ['OK'],
                -font => $FONT,
                -text => "Radio-Net\n" . "La radio via Internet \n" .
                                   "necessite mplayer et ses divers drivers.\n" .
                                   "remi\@suinot.org\n". "(updated $UPDATED)\n\n" .
                                   "Tk version $Tk::VERSION"
               );
$help->resizable(0, 0);

#-- bouton About
my $about = $lookup_frame->Button(
                           -text => 'About',
                           -command => [$help => 'Show']
                           )->pack(-side => 'left', -expand => '1', -fill => 'both');

#-- bouton Exit
my $exit = $lookup_frame->Button(
                          -text => 'Exit',
                          -cursor => 'hand1',
                          -activeforeground => 'red',
                          -command => sub { exit; }
                          )->pack(-side => 'left', -expand => '1', -fill => 'both');
 
# -- nouvelle frame pour la liste des radio
my $liste_radio = $mw->Frame()->pack(-side => 'left', -expand => '1', -fill => 'both');

$liste_radio->Label(-text=> "\n Choisissez votre radio! \n")->pack(-side => 'top');
my $i=0;
my $j=0;
my $result=-1;
foreach $i (@radio ){
    $j++;
    $liste_radio->Radiobutton(
                  -text => $i,
                  -variable => \$result,
                  -value => $j
                 )->pack( -side => 'top');
}

# -- bouton Ecouter!
my $execute = $liste_radio->Button(
                            -text => 'Ecoutez!',
                            -background => 'cyan',
                            -foreground => 'blue',
                            -borderwidth => 1,
                            -relief => 'ridge',
                            -highlightthickness => 0,
                            -command => \&ecoutez
                           )->pack(-side => 'bottom');
                                                                                                                                                       
MainLoop;

#-------------- Fonctions -------------------------
sub ecoutez {

  print "valeur de sortie: $result \n";

  if ( $result >= 1) {
     print "Radio: $radio[$result] \nLecteur: $lecteur[$lect[$result-1]] \nAdresse: $adresse[$result-1] \n\n";
     exec "$lecteur[$lect[$result-1]] $adresse[$result-1]";
  } elsif ( $result == -1) {
    $ERROR_TXT="Vous n'avez rien sectionne !!!\n Reflechissez un peu!";
    $dialog_err->Show;
  } else {
    $ERROR_TXT="Erreur de type inconnue...!!!\n";
    $dialog_err->Show;
  }

}

sub charge_fichier_liste_radio {
  my $i=0;
  my @tmp;
  open (FR, $fichier) or die "Fichier des radios non trouve�.\n";
 
  while( <FR> ) {
    if ( $_ =~ /[#*]/ ) {
      # Un commentaire? On passe!
    } else {
      @tmp = split (/,/);
      $lect[$i] = $tmp[0];
      $radio[$i] = $tmp[1] ;
      $adresse[$i] = $tmp[2];
      chomp($adresse[$i]);
      print "$i: $radio[$i] -> $adresse[$i]<\n";
      $i++;
    }
  }
  close FR;
}
```

Si cela peut servir…

Rémi.

---

<div class="post-metadata">

**Author:** ![TinninE1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/c77e96/32.png) [@TinninE1](https://www.debian-fr.org/u/TinninE1)\
**Post date:** [Février 20, 2016, 4:39 UTC](https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820/79 "2016-02-20T16:39:15Z")

</div>

Merci pour la modif.

La TV free est réservé pour les abonnés free ![:smt024](https://www.debian-fr.org/uploads/default/original/1X/d697e874e336a377d9ee24639447389ca55c9a17.gif)

Plutout que de polluer plus ce post  
je met à jour mon post :

Voici une source faites avec Lazarus pour ecouter la radio :  
[tinnine.free.fr/#tinradio](http://tinnine.free.fr/#tinradio)

---

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 20, 2016, 4:39 UTC](https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820/80 "2016-02-20T16:39:17Z")

</div>

Mon par feux 🙂

```nohighlight
#!/bin/sh
case "$1" in
  start)
echo "démarrage du par feux 0.0.1"

ETH="eth0"
PCIP="192.168.1.80"
#permet d'hobtenire l'ip local de la machine,n'est pas utiliser dans ce script mai pourrait servir.
#IP=`/sbin/ifconfig $ETH | grep inet | cut -d : -f 2 | cut --delimiter=' ' -f 1`

iptables --zero
iptables -F
iptables -X
iptables -t nat -X
iptables -t nat -F

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
#================================== IP BAN===================================================
# si le nombre d'entrée devien importante il peux s'averer utile de crée un fichier des ip bannie
#Ban_IP="192.168.1.254"
#Ban_IP_1="192.168.1.253"
Ban_IP_2="224.0.0.251"

#iptables -A OUTPUT -o $ETH -m iprange --dst-range $Ban_IP -j DROP
#iptables -A OUTPUT -o $ETH -m iprange --src-range $Ban_IP -j DROP
#iptables -A INPUT -i $ETH -m iprange --dst-range $Ban_IP -j DROP
#iptables -A INPUT -i $ETH -m iprange --src-range $Ban_IP -j DROP

#iptables -A OUTPUT -o $ETH -m iprange --dst-range $Ban_IP_1 -j DROP
#iptables -A OUTPUT -o $ETH -m iprange --src-range $Ban_IP_1 -j DROP
#iptables -A INPUT -i $ETH -m iprange --dst-range $Ban_IP_1 -j DROP
#iptables -A INPUT -i $ETH -m iprange --src-range $Ban_IP_1 -j DROP

iptables -A OUTPUT -o $ETH -m iprange --dst-range $Ban_IP_2 -j DROP
iptables -A OUTPUT -o $ETH -m iprange --src-range $Ban_IP_2 -j DROP
iptables -A INPUT -i $ETH -m iprange --dst-range $Ban_IP_2 -j DROP
iptables -A INPUT -i $ETH -m iprange --src-range $Ban_IP_2 -j DROP
#================================	Diver en cour de teste	====================================
# ne tenez pas compte de cette section j'ai changer de routeur et je fait quelque teste :slightly_smiling:
iptables -A INPUT -p UDP --dport 68 --sport 67 -m iprange --dst-range 255.255.255.255 -j ACCEPT
iptables -A INPUT -p UDP --dport 67 --sport 68 -m iprange --dst-range 255.255.255.255 -j ACCEPT
iptables -A OUTPUT -p TCP --dport 68 --sport 67 -m iprange --dst-range 255.255.255.255 -j ACCEPT
iptables -A OUTPUT -p TCP --dport 67 --sport 68 -m iprange --dst-range 255.255.255.255 -j ACCEPT

iptables -A INPUT -p UDP --dport 68 --sport 67 -m iprange --dst-range 192.168.1.254 -j ACCEPT
iptables -A INPUT -p UDP --dport 67 --sport 68 -m iprange --dst-range 192.168.1.254 -j ACCEPT
iptables -A INPUT -p TCP --dport 68 --sport 67 -m iprange --dst-range 192.168.1.254 -j ACCEPT
iptables -A INPUT -p TCP --dport 67 --sport 68 -m iprange --dst-range 192.168.1.254 -j ACCEPT

iptables -A OUTPUT -p UDP --dport 68 --sport 67 -m iprange --dst-range 192.168.1.254 -j ACCEPT
iptables -A OUTPUT -p UDP --dport 67 --sport 68 -m iprange --dst-range 192.168.1.254 -j ACCEPT
iptables -A OUTPUT -p TCP --dport 68 --sport 67 -m iprange --dst-range 192.168.1.254 -j ACCEPT
iptables -A OUTPUT -p TCP --dport 67 --sport 68 -m iprange --dst-range 192.168.1.254 -j ACCEPT

#iptables -A OUTPUT -p UDP --dport 138 --sport 138 -m iprange --src-range 255.255.255.255 -j ACCEPT
#iptables -A INPUT -p UDP --dport 138 --sport 138 -m iprange --src-range 192.168.1.80 --dst-range 192.168.1.255 -j ACCEPT
#iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -p UDP --dport 138 --sport 138 -m iprange --src-range 192.168.1.80 --dst-range 192.168.1.255 -j ACCEPT

iptables -A INPUT -p UDP --dport 137 --sport 137 -m iprange --src-range 192.168.1.10 --dst-range 192.168.1.255 -j ACCEPT

iptables -A INPUT -i $ETH -m state --state NEW,INVALID -j ULOG --ulog-prefix="Drop"
iptables -A INPUT -i $ETH -m state --state NEW,INVALID -j DROP

#========================================== DNS ========================================
iptables -A INPUT -p UDP --sport 53 -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -p UDP --dport 53 -j ACCEPT
#================================== ouverture ssh serveur et client ===========================
#La durée du ban,
# permet donc d'avoir X temp duran la qu'elle la première connection est permise 
Ban_TIME="900"
#nombre de connection permise PAR IP, si LA connection actuelle est deja (toujours) connectée, 
#c'est la nouvelle connection qui sera bannie duran le $Ban_TIME mai laisse la première connection active
#il est donc iportan de ne pas laisser trop longtemp le temps pour le client ssh puisse ce loguer. afin de pouvoire reprendre la main si les deux client 
# aurait la meme ip publique
#l'avantage c'est que cela limite le nombre de connection par ip. limite aussi le brute force puis qu'il lui faut passe 1 connection la foit par ip
#on pourrait pour bien faire limiter le nombre de tentative qui serai valable meme si la perssonne ce deconnecte, puis ce reconnecte
# il faudrai alors cree une 2 emem chaine avec un hitcount global, le risque c'est de bloque le serveur completment
Ban_FAILD="1"
#creation de la chaine
iptables -N SSH
#on log
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSH --rcheck --seconds $Ban_TIME --hitcount $Ban_FAILD -j ULOG --ulog-prefix="SSH"
# si hitcount est depasser on ban 
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSH --rcheck --seconds $Ban_TIME --hitcount $Ban_FAILD -j DROP
# permière et les suivante (si le hitcoun n'est pas atteint ) entrée son enfin aceptée
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
#laisse sortir les client ssh 
iptables -A OUTPUT -p TCP --dport 22 -m state --state NEW -j ACCEPT
#================================== e-mail ===================================================
#on force l'ip de sont propre FAI pour eviter d'avoir un port ouvert.
m1="212.147.0.153"
m2="212.147.0.121"
iptables -A OUTPUT -p TCP --dport 110 -m iprange --src-range $PCIP --dst-range $m1 -j ACCEPT
iptables -A INPUT -p TCP --sport 110 -m iprange --dst-range $PCIP --src-range $m1 -j ACCEPT
iptables -A OUTPUT -p TCP --dport 25 -m iprange --src-range $PCIP --dst-range $m2 -j ACCEPT
iptables -A INPUT -p TCP --sport 25 -m iprange --dst-range $PCIP --src-range $m2 -j ACCEPT
#================================== Navigateur================================================
#encore quelque subtiliter de ce coter car beacoup de trafique passe par le port 80.
iptables -A INPUT -p TCP -m multiport --source-port 80 -j ACCEPT
iptables -A INPUT -p TCP --sport 443 -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -p UDP --dport 80 -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -p TCP -m multiport --destination-port 80,443 -j ACCEPT
#================================== IRC =======================================================
iptables -A INPUT -p TCP --sport 6667 -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -p TCP --dport 6667 -j ACCEPT
#==================================Nexuiz=====================================================
# plage de port délibererment ouvert, en faite c'est pas pratique et pas fiable (on ne verifie pas ou sa va ce connecter)
# j'ai resolut ce petit problème plus bas
iptables -A OUTPUT -p UDP -m multiport --destination-port 26000:26010 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p UDP -m multiport --source-port 26000:26010 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p TCP -m multiport --destination-port 26000:26010 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p TCP -m multiport --source-port 26000:26010 -m state --state ESTABLISHED,RELATED -j ACCEPT
#================================== amsn =====================================================
iptables -A OUTPUT -p TCP -m multiport --destination-port 1863 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p TCP -m multiport --source-port 1863 -j ACCEPT
iptables -A OUTPUT -p TCP --dport 5353 --sport 5353 -m state --state NEW,ESTABLISHED,RELATED -j DROP
iptables -A INPUT -p TCP --dport 5353 --sport 5353 -j DROP
#================================== ftp =========================================================
ftp="212.147.60.253"
iptables -A OUTPUT -p TCP -m iprange --dst-range $ftp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p TCP -m iprange --src-range $ftp -m state --state ESTABLISHED,RELATED -j ACCEPT
#================================== ip passee en ligne de commande ================================
T="true"
I="0"
#site a rentrer sur la ligne de commande après le start 
#Ceci permet de rentrer un ip sur la ligne de commande plutot que les placers dans un fichier,
#le port n'est pas préciser,cela peux s'averer utile pour Nexiuz ou bitorrent etc
#il est possible de placer les ip en fixe mai si elle change il va faloir éditer le fichier
#alors que en passant le parramettre sur la ligne de commande il suffi de modifier directement la ligne
#il serai aussi possible de passer par un autres fichier pour placer les ip.
#while $T ;do
for B in $@ ;do
#I=$(($I+1))
	if [! -z $B] && [$B != "start"] ;then
		E=`iptables -A OUTPUT -p TCP -m iprange --dst-range $B -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT`
		E=`iptables -A INPUT -p TCP -m iprange --src-range $B -m state --state ESTABLISHED,RELATED -j ACCEPT`
		echo "ip ajoutée: $B"
	fi
done
#================================== scanner et autres logiciel local==========================
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#================================== ICPM ====================================================
#de nos jours c'est plus une menace,m'enfin reston mefian tout de meme
#il pourrait etre bon d'utilise le module recent pour eviter les attack via les zombie.
iptables -A INPUT -p 1 -m limit --limit 30/h --limit-burst 30 -j ACCEPT
#================================== Règle pour logquer========================================
iptables -A INPUT -i $ETH -j ULOG --ulog-prefix="Entrée"
iptables -A OUTPUT -o $ETH -m owner --uid-owner 0 -j ULOG --ulog-prefix="Root"
iptables -A OUTPUT -o $ETH -j ULOG --ulog-prefix="Sortie"

	;;
  stop)
iptables --zero
iptables -F
iptables -X
iptables -t nat -X
iptables -t nat -F

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

	;;
  *)
	N=/etc/init.d/$NAME
	echo "Usage: /etc/init.d/firewall {start ¦ stop | sart ip1 ip2 ip3 ip4 etc}" $DAEMON >&2
	exit 1
	;;
esac

exit 0

```

[Page précédente](https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820.md?page=3)

[Page suivante](https://www.debian-fr.org/t/pour-les-scripts-cest-ici/3820.md?page=5)
