Capture d’écran sous Frugalware

Quand on regarde une capture d’écran de quelqu’un, quoi de plus agréable de savoir au premier coup d’oeil la distribution utilisée, le thème, l’environnement de bureau, la police affichée, les icones, et j’en passe ?

C’est que propose ce script, basé sur une création de stxza (disponible ici), adapté en grande partie par Devil505. Exemple :

Exemple de rendu

#!/usr/bin/perl
use Switch;
use strict;
use File::Basename;
 
####################
## Config options ##
####################
 
## What distro logo to use to use, Available "Frugalware Debian Ubuntu None" ##
my $distro = "Frugalware";
my $myArchVersion = "Frugalware Linux (Current)";
 
## what values to display. Use "OS Kernel DE WM win_theme Theme Font Icons" ##
my $display = "OS Kernel DE WM Win_theme Theme Icons Font Background";
 
## What colors to use for the variables. ##
my $textcolor = "\e[0m";
 
## Prints little debugging messages if set to 0 ##
my $quite = 1;
 
 
 
########################
## Script starts here ##
########################
## Define some thing to work with strict ##
my @line = ();
my $found = 0;
my $DE = "NONE";
my $WM = "Beryl";
 
## Hash of WMs and the process they run #
my %WMlist = ("Beryl"           => "beryl",
              "Fluxbox"         => "fluxbox",
              "Openbox"         => "openbox",
              "Blackbox"        => "blackbox",
              "Xfwm4"           => "xfwm4",
              "Metacity"        => "metacity",
              "Kwin"            => "kwin",
              "FVWM"            => "fvwm",
              "Enlightenment"   => "enlightenment",
              "IceWM"           => "icewm",
              "Window Maker"    => "wmaker",
              "Compiz-Fusion"   => "compiz",
              "PekWM"           => "pekwm",
              "Awesome"         => "awesome",
              "Dwm"             => "dwm",
              "XMonad"          => "xmonad"
              "PycaWM"          => "pycawm" );
 
## Hash of DEs and the process they run ##     
my %DElist = ("Gnome"   => "gnome-session",
              "Xfce4"   => "xfce-mcs-manage",
              "KDE"     => "ksmserver");
 
## Get Kernel version ##
if ( $display =~ "Kernel"){
  print "\::$textcolor Finding Kernel version\n" unless $quite == 1;
  my $kernel = `uname -r`;
  $kernel =~ s/\s+/ /g;
  $kernel = " Kernel:$textcolor $kernel";
  push(@line, "$kernel");
}
 
## Find running processes ##
print "\::$textcolor Getting processes \n" unless $quite == 1;
my $processes = `ps -A | awk {'print \$4'}`;
 
## Find DE ##
while( (my $DEname, my $DEprocess) = each(%DElist) ) {
  print "\::$textcolor Testing $DEname process: $DEprocess \n" unless $quite == 1;
  if ( $processes =~ m/$DEprocess/ ) {
    $DE = $DEname;
    print "\::$textcolor DE found as $DE\n" unless $quite == 1;
    if( $display =~ m/DE/ ) {
      push(@line, " DE:$textcolor $DE");
    }
    last;
  }
}
 
## Find WM ##
while( (my $WMname, my $WMprocess) = each(%WMlist) ) {
 print "\::$textcolor Testing $WMname process: $WMprocess \n" unless $quite == 1;
  if ( $processes =~ m/$WMprocess/ ) {
    $WM = $WMname;
    print "\::$textcolor WM found as $WM\n" unless $quite == 1;
    if( $display =~ m/WM/ ) {
      push(@line, " WM:$textcolor $WM");
    }
    last;
  }
}
 
## Find WM theme ##
if ( $display =~ m/Win_theme/ ){
  switch($WM) {
    case "Openbox" {
      print "\::$textcolor Finding $WM theme\n" unless $quite == 1;
      open(FILE, "$ENV{HOME}/.config/openbox/rc.xml")
      || die "\e[0;31m<Failed>\n";
      while( <FILE> ) {
        if( /<name>(.+)<\/name>/ ) {
          while ( $found == 0 ) {
            print "\::$textcolor $WM theme found as $1\n" unless $quite == 1;
            push(@line, " WM Theme:$textcolor $1");
            $found = 1;
          }
        }
      }
      close(FILE);
    }
    case "Metacity" {
      print "\::$textcolor Finding $WM theme\n" unless $quite == 1;
      my $gconf = `gconftool-2 -g /apps/metacity/general/theme`;
      print "\::$textcolor $WM theme found as $gconf\n" unless $quite == 1;
      chomp ($gconf);
      push(@line, " WM Theme:$textcolor $gconf");
    }
    case "Fluxbox" {
      print "\::$textcolor Finding $WM theme\n" unless $quite == 1;
      open(FILE, "$ENV{HOME}/.fluxbox/init")
      || die "\e[0;31m<Failed>\n";
      while( <FILE> ) {
        if( /session.styleFile:.*\/(.+)/ ) {
          print "\::$textcolor $WM theme found as $1\n" unless $quite == 1;
          push(@line, " WM Theme:$textcolor $1");
        }
      }
      close(FILE);
    }
    case "Blackbox" {
      print "\::$textcolor Finding $WM theme\n" unless $quite == 1;
      open(FILE, "$ENV{HOME}/.blackboxrc")
      || die "\e[0;31m<Failed>\n";
      while( <FILE> ) {
        if( /session.styleFile:.*\/(.+)/ ) {
          print "\::$textcolor $WM theme found as $1\n" unless $quite == 1;
          push(@line, " WM Theme:$textcolor $1");
        }
      }
      close(FILE);
    }
    case "Xfwm4" {
      print "\::$textcolor Finding $WM theme\n" unless $quite == 1;
      open(FILE, "$ENV{HOME}/.config/xfce4/mcs_settings/xfwm4.xml")
      || die "\e[0;31m<Failed>\n";
      while( <FILE> ) {
        if( /<option name="Xfwm\/ThemeName" type="string" value="(.+)"\/>/ ) {
          print "\::$textcolor $WM theme found as $1\n" unless $quite == 1;
          push(@line, " WM Theme:$textcolor $1");
        }
  } 
      close(FILE);
    }
    case "Kwin" {
      print "\::$textcolor Finding $WM theme\n" unless $quite == 1;
      open(FILE, "$ENV{HOME}/.kde/share/config/kwinrc")
      || die "\e[0;31m<Failed>\n";
      while( <FILE> ) {
        if( /PluginLib=kwin3_(.+)/ ) {
          print "\::$textcolor $WM theme found as $1\n" unless $quite == 1;
          push(@line, " WM Theme:$textcolor $1");
        }
      }
      close(FILE);
    }
    case "Enlightenment" {
      print "\::$textcolor Finding $WM theme\n" unless $quite == 1;
      my $remote = `enlightenment_remote -theme-get theme` ;
      if( $remote =~ m/.*FILE="(.+).edj"/ ) {
        print "\::$textcolor $WM theme found as $1\n" unless $quite == 1;
        push(@line, " WM Theme:$textcolor $1");
      }     
    }       
    case "IceWM" { 
      print "\::$textcolor Finding $WM theme\n" unless $quite == 1;
      open(FILE, "$ENV{HOME}/.icewm/theme")
      || die "\e[0;31m<Failed>\n";
      while( <FILE> ) {
        if( /Theme="(.+)\/.*.theme/ ) {
          while( $found == 0 ) {
            print "\::$textcolor $WM theme found as $1\n" unless $quite == 1;
            push(@line, " WM Theme:$textcolor $1");
            $found = 1;
          }
        }
      }   
      close(FILE);
    }   
    case "PekWM" {
      print "\::$textcolor Finding $WM theme\n" unless $quite == 1;
      open(FILE, "$ENV{HOME}/.pekwm/config")
      || die "\e[0;31m<Failed>\n";
      while( <FILE> ) {
        if( /Theme.*\/(.*)"/ ) {
            print "\::$textcolor $WM theme found as $1\n" unless $quite == 1;
            push(@line, " WM Theme:$textcolor $1");
        }
      }
      close(FILE); 
    } 
  }   
}     
 
## Find Theme Icon and Font ##
if ( $display =~ m/[Theme, Icons, Font, Background]/) {
  switch($DE) {
    case "Gnome" {
      print "\::$textcolor Finding $DE variables\n" unless $quite == 1;
      if ( $display =~ m/Theme/ ) {
        my $gconf = `gconftool-2 -g /desktop/gnome/interface/gtk_theme`;
        chomp ($gconf);
        print "\::$textcolor GTK Theme found as $1\n" unless $quite == 1;
        push(@line, " GTK Theme:$textcolor $gconf");
      }
      if ( $display =~ m/Icons/ ) {
        my $gconf = `gconftool-2 -g /desktop/gnome/interface/icon_theme`;
        chomp ($gconf);
        push(@line, " Icons:$textcolor $gconf");
      } 
      if ( $display =~ m/Font/ ) {
        my $gconf = `gconftool-2 -g /desktop/gnome/interface/font_name`;
        chomp ($gconf);
        push(@line, " Font:$textcolor $gconf");
      }
	  if ( $display =~ m/Background/ ) {
        my $gconf = `gconftool-2 -g /desktop/gnome/background/picture_filename`;
        chomp ($gconf);
		my $bname = basename($gconf);
		push(@line, " Background:$textcolor $bname");
      }
 
    } 
    case "Xfce4" {
      my @sort = ();
      print "\::$textcolor Finding $DE variables\n" unless $quite == 1;
      open(FILE, "$ENV{HOME}/.config/xfce4/mcs_settings/gtk.xml")
      || die "\e[0;31m<Failed>\n";
      while( <FILE> ) {
     if ( $display =~ m/Theme/ ) {
          if (/<option name="Net\/ThemeName" type="string" value="(.+)"\/>/ ) {
            print "\::$textcolor GTK Theme found as $1\n" unless $quite == 1;
            unshift(@sort, " GTK Theme:$textcolor $1");
          } 
        }
        if ( $display =~ m/Icons/ ) {
          if (/<option name="Net\/IconThemeName" type="string" value="(.+)"\/>/ ) {
            print "\::$textcolor Icons found as $1\n" unless $quite == 1;
            unshift(@sort, " Icons:$textcolor $1");
          }
        }
        if ( $display =~ m/Font/ ) {
          if ( /<option name="Gtk\/FontName" type="string" value="(.+)"\/>/ ) {
            print "\::$textcolor Font found as $1\n" unless $quite == 1;
            unshift(@sort, " Font:$textcolor $1");
          } 
        }
      }
      close(FILE);
      ## Sort variables so they're ordered "Theme Icon Font" ##
      foreach my $i (@sort) {
        push(@line, "$i");
      }
    } 
    case "KDE" { 
      print "\::$textcolor Finding $DE variables\n" unless $quite == 1;
      open(FILE, "$ENV{HOME}/.kde/share/config/kdeglobals")
      || die "\e[0;31m<Failed>\n";
      while( <FILE> ) { 
        if ( $display =~ m/Theme/ ) {
          if ( /widgetStyle=(.+)/  ) {
            print "\::$textcolor Wiget Style found as $1\n" unless $quite == 1;
            push(@line, " Wiget Style:$textcolor $1");
          }
          if (/colorScheme=(.+).kcsrc/ ) {
            print "\::$textcolor Color Scheme found as $1\n" unless $quite == 1;
            push(@line, " Color Scheme:$textcolor $1");
          }
        }
        if ( $display =~ m/Icons/ ) {
          if ( /Theme=(.+)/ ) {
            print "\::$textcolor Icons found as $1\n" unless $quite == 1;
            push(@line, " Icons:$textcolor $1");
          } 
        }   
        if ( $display =~ m/Font/ ) {
          if ( /font=(.+)/ ) {
            my $font = (split/,/, $1)[0];
            print "\::$textcolor Font found as $font\n" unless $quite == 1;
            push(@line, " Font:$textcolor $font");
          }
        }
      }
      close(FILE);
 
    }
    else {
      my @files = ("$ENV{HOME}/.gtkrc-2.0", "$ENV{HOME}/.gtkrc.mine",);
      foreach my $file (@files) {
        if ( -e $file ) {
          print "\::$textcolor Opening $file\n" unless $quite == 1; 
          open(FILE, $file)
          || die "\e[0;31m<Failed>\n";
          while( <FILE> ) {
            if ( $display =~ m/Theme/ ) {
              if( /include ".*themes\/(.+)\/gtk-(1|2)\.0\/gtkrc"/ ){
                print "\::$textcolor GTK theme found as $1\n" unless $quite == 1;
                push(@line, " GTK Theme:$textcolor $1");
              }
            }
            if ( $display =~ m/Icons/ ) {
              if( /.*gtk-icon-theme-name.*"(.+)"/ ) {
                print "\::$textcolor Icons found as $1\n" unless $quite == 1;
                push(@line, " Icons:$textcolor $1");
              }
            }
            if ( $display =~ m/Font/ ) {
              if( /.*gtk-font-name.*"(.+)"/ ) {
                print "\::$textcolor Font found as $1\n" unless $quite == 1;
                push(@line, " Font:$textcolor $1");
             }
            }
          }
          close(FILE);
        }
      }
    }
  }
}
 
## Display the system info ##
 
if ( $distro =~ m/Frugalware/ ) {
 
## Get Frugalware version ##
if ( $display =~ "OS"){
  print "\::$textcolor Finding Frugalware version\n" unless $quite == 1;
  my $version = $myArchVersion;
  $version =~ s/\s+/ /g;
  $version = " OS:$textcolor $version";
  unshift(@line, "$version");
}
 
my $c1 = "\e[1;36m";
my $c2 = "\e[0;36m";
 
system("clear");
 
print "
${c1}           `++/::-.`                                
${c1}          /o+++++++++/::-.`                        
${c1}         `o+++++++++++++++o++/::-.`                
${c1}         /+++++++++++++++++++++++oo++/:-.``        
${c1}        .o+ooooooooooooooooooosssssssso++oo++/:-`  
${c1}        ++osoooooooooooosssssssssssssyyo+++++++o:  
${c1}       -o+ssoooooooooooosssssssssssssyyo+++++++s`  
${c1}       o++ssoooooo++++++++++++++sssyyyyo++++++o:   
${c1}      :o++ssoooooo/-------------+syyyyyo+++++oo   
${c1}     `o+++ssoooooo/-----+++++ooosyyyyyyo++++os:    $c1@line[0]
${c1}     /o+++ssoooooo/-----ooooooosyyyyyyyo+oooss     $c1@line[1]
${c1}    .o++++ssooooos/------------syyyyyyhsosssy-     $c1@line[2]
${c1}    ++++++ssooooss/-----+++++ooyyhhhhhdssssso      $c1@line[3]
${c1}   -s+++++syssssss/-----yyhhhhhhhhhhhddssssy.      $c1@line[4]
${c1}   sooooooyhyyyyyh/-----hhhhhhhhhhhddddyssy+       $c1@line[5]
${c1}  :yooooooyhyyyhhhyyyyyyhhhhhhhhhhdddddyssy`       $c1@line[6]
${c1}  yoooooooyhyyhhhhhhhhhhhhhhhhhhhddddddysy/        $c1@line[7]
${c1} -ysooooooydhhhhhhhhhhhddddddddddddddddssy         $c1@line[8]
${c1}  .-:/+osssyyyysyyyyyyyyyyyyyyyyyyyyyyssy:           
${c1}        ``.-/+oosysssssssssssssssssssssss          
${c1}                ``.:/+osyysssssssssssssh.  
${c1}                         `-:/+osyyssssyo           
${c1}                                 .-:+++`
${c2} 
\e[0m";
}

Suivant le navigateur utilisé et la résolution de votre écran, la gestion des espaces peut être assez catastrophique (le logo de frugalware désordonné), un simple copier / coller direct du script afficherait le logo complètement déformer. Pour remédier à cela, téléchargez directement le script puis donnez-lui les droits d’exécutions :

cd ~
wget http://www.apteno.fr/wp-content/uploads/2009/06/info.pl
chmod +x info.pl

Ensuite, il ne reste plus qu’à l’exécuter :

./info.pl

L’afficher au démarrage d’un terminal

Il suffit d’ajouter « perl ~/info.pl », dans le cas où votre info.pl se situe dans votre répertoire personnel (/home/utilisateur) :

echo -e "\nperl ~/info.pl" >> ~/.bashrc

Prendre une capture d’écran

Les informations sur le thème et le système sont maintenant afficher à chaque ouverture d’un terminal (pour le désactiver, il suffit d’ôter « perl ~/info.pl » de votre .bashrc), mais comment immortalisé votre bureau ?

Deux choix s’offre à vous :

  • Directement via le terminal :

    scrot capture-%H-%M-%S.png -d 5 -q 90

    Qui prend un instantané de votre bureau, 5 secondes après son lancement, sous la forme « capture-heure-minute-seconde.png ». Méthode efficace, mais la commande apparait sur la capture.

  • À l’aide du premier script, en y ajoutant cette même commande :
    cd ~
    wget http://www.apteno.fr/wp-content/uploads/2009/06/info.pl
    echo "system('scrot capture-%H-%M-%S.png -d 5 -q 90');" >> info.pl
    chmod +x info.pl

    Pour l’exécuter, « ./info.pl » comme la première fois. Cette méthode a l’avantage d’afficher un terminal « propre ».

Voilà, vous savez maintenant comment afficher les informations de votre Frugalware bien aimée à chaque lancement d’un terminal, ainsi que deux manières de prendre une capture d’écran (il en existe, bien entendus bien plus que cela).

Note : Pour s’afficher entièrement, il est nécessaire d’avoir un terminal de 82×25 blocs au minimum.

7 commentaires
23 juin 2009 dans Frugalware
Tagué ,

Ouverture du blog

C’est aujourd’hui qu’Apteno’s Blog ouvre ses portes !

Le 23 avril 2008, je décidais de créer un blog traitant de l’informatique libre, en particulier de GNU/Linux. Plus d’un an plus tard, le blog est en ligne.

De quoi parlera il ?

Comme je le disais plus haut, le sujet principal sera l’informatique Libre en général, passant par la configuration ardue d’un logiciel, à l’installation d’une distribution. Étant passé depuis peu à Frugalware, c’est avec joie que j’en parlerai. N’oublions pas aussi « la sauvegarde », sujet qui me tient beaucoup à coeur : j’en parlerai de temps à autre.

À qui s’adresse ce blog ?

À tout le monde s’intéressant au monde du logiciel Libre ! Je ferai de mon mieux pour expliquer de sorte à ne perdre personne en cours de route.

Fréquence de publication ?

Une fois par semaine, parfois plus, tout dépendra de mon temps libre et de mes idées.

Voilà pour cette courte introduction, à bientôt pour le prochain article !

5 commentaires
20 juin 2009 dans Vie du blog
Tagué ,