GNU/Linux

Un client pour réseaux sociaux sous GNU/Linux : mission impossible ?

Agacé d'avoir un Firefox qui utilise allègrement plus de 1 Go de mémoire avec seulement trois extensions et cinq onglets, j'ai regardé le rapport de about:memory. Une partie du problème vient des onglets épinglés.

  • 50 Mo pour Gmail,
  • 40 Mo pour Twitter,
  • 30 Mo pour Facebook,
  • 30 Mo pour Youtube,
  • 25 Mo pour mon lecteur de flux RSS auto-hébergé,
  • 15 Mo pour Framasphère/Diaspora.

Bien, ça fait donc un total de 160 Mo de mémoire. La première pensée que j'ai eu en voyant cela fut : « eh, si je trouvais des clients desktop, ça me libèrerait de la mémoire ». J'avais quelques souvenirs de clients Twitter ou Facebook.

Note aux libristes fondamentalistes

À celles et ceux qui viendraient chercher la petite bête (« bouh, pas bien, il utilise des services pas libre du tout, le vilain »), je répondrai que le problème se pose également pour les services libres. Prenez Diaspora, GNU Social/Laconica, Pump.io/Identi.ca/Status.net (oui ça fait déjà 3 noms pour désigner basiquement la même chose, comment voulez-vous que le grand public y adhère ?), votre webmail favorite (et à part une auto-hébergée, en existe-t-il une vraiment libre et simple d'utilisation ?).

Les webmails

Pour les webmails, on peut toujours utiliser un logiciel comme Thunderbird (100 Mo de mémoire minimum) ou Evolution (50 Mo minimum). Oui, donc on repassera pour un client en remplacement d'un onglet Firefox. Il en existe certainement des plus légers, comme Sylpheed ou Claws Mail, mais je n'ai franchement pas envie de partir à la recherche du client mail parfait. J'ai déjà bien trop à faire avec le reste…

Un client unifié

Bon, les réseaux sociaux. Le premier réflexe est d'installer Gwibber (devenu Friends depuis). Là, on nous demande de configurer les Online Accounts dans les paramètres système. Problème : sous Mint, ça n'existe pas. J'aurais dû me méfier à la vue des commentaires de la communauté.

Après deux bonnes heures à installer/désinstaller des tas de logiciels, je tombe sur gFeedline, uniquement installable par paquet .deb téléchargeable sur un Google Code qui est maintenant fermé… Ce n'est donc ni simple d'accès, ni la meilleure manière d'installer un logiciel pérenne… Il est dit qu'il fonctionne pour Facebook et Twitter. Aurais-je trouvé la perle rare ? 50 Mo de mémoire consommée, c'est correct, mais ne fonctionne que pour Twitter, sur Facebook l'onglet reste désespéremment vide.

Twitter

Bon, bah exit un client unifié Twitter/Facebook/Identi.ca/etc. Cherchons un client Twitter seul alors. Il y en a(vait) un paquet.

  • Birdie ? 90 Mo de mémoire.
  • Hothot ? 100 Mo de mémoire.
  • Turpial qui se vante d'être léger ? 70 Mo et ne fonctionne même pas sur ma bécanne (problems registering a new account). Quelques recherches montrent que sous Debian/Ubuntu, il vaudrait mieux passer par une installation par sources, qui ne fonctionne pas. On en vient à vérifier les dates… Le logiciel n'a pas été mis à jour depuis un an, il semble ne plus être maintenu. Pourquoi est-il encore dans les dépôts ?
  • Qwitik ? 12 Mo de mémoire, mais n'est pas à jour, utilise l'ancienne API de Twitter et donc ne fonctionne pas…
  • Mikutter ? 90 Mo et en japonais/anglais. Sans parler du fait qu'il échappe certains caractères et n'affiche pas les images.
  • Polly ? 60 Mo. En anglais. On doit passer par un PPA pour l'installer, et il a du mal à se lancer la première fois.
  • Choqok ? Oh, 30 Mo en lui-même. À cela s'ajoute les quelques 50 Mo de services KDE qui tournent sous Gnome juste pour lui, on arrive à 70 Mo. Malgré un greffon prévu pour, n'affiche ni les images, ni les vidéos. Chez moi, il s'arrête même à 20 tweets, impossible d'en afficher plus…
  • gTwitter ? Tweetdeck ? Twhirl ? Pino ? Seesmic ? Tout ça a disparu.

Nan, ce que nous avons à profusion sous Linux, ce sont des clients en ligne de commande. Joie !

Facebook

Point de salut pour Twitter, un onglet Firefox reste la meilleure option. Facebook peut-être ? Un unique client s'offre à nous : Desktop Facebook, qui ne s'installe malheureusement pas sous Trusty (et donc Mint 17) à cause d'une dépendance non-installable.

Conclusion

Voilà pour les clients desktop pour réseaux sociaux. À moins d'avoir besoin de certaines fonctionnalités, un simple onglet épinglé vaut mieux en terme de consommation mémoire. On notera que la diversité de l'offre sous Linux s'est considérablement appauvrie au point de ne proposer qu'une ou deux alternatives fonctionnelles pour chaque réseau. Il manque certainement d'un client qui unifie tout ça. Du côté des réseaux sociaux plus libres (Identi.ca, Diaspora, etc.), là c'est pire : il n'y a rien. Passez votre chemin.

Épilogue sur Firefox

Je disais en préambule que Firefox dépassait facilement le gigaoctet de mémoire. En le lançant en mode sans échec, on tombe à 350 Mo. Ajoutez à cela les 160 Mo des onglets épinglés, vous arrivez à plus de 500 Mo juste pour vérifier les mails et les réseaux sociaux. Si l'on veut un peu de confidentialité en supprimant les trackers, que ce soit avec Ghostery ou Privacy Badger, on arrive à près de 650 Mo pour une navigation « de base ». Et comme Firefox met un temps fou à se lancer, on préfère le garder toujours ouvert…

Je trouve extraordinaire qu'on en soit arrivé au point de garder allumé un logiciel qui nous prend entre 600 Mo et 1 Go de RAM juste pour faire une recherche rapide et notre veille à la pause café.

Les aventures d'un linuxien sous FreeBSD

Le système de paquets

Comme sur la plupart des systèmes GNU/Linux, il y a deux manières d'installer des paquets : par compilation et par binaires. Après avoir essayé par compilation (où il m'a fallu attendre trois heures avant que le PC ne coupe par surchauffe… Ce n'était que links…), j'ai vite compris que je passerai par les binaires à l'avenir. Dommage, j'aimais bien cette idée de catalogue de makefile classé directement dans le système de fichiers.

Donc on fait pkg install paquet. S'il n'est pas déjà présent, pkg va s'auto-installer, ce qui est assez classe (j'adore ce genre de choses, pensez par exemple au premier compilateur C qui s'est auto-compilé…).

À noter que pkg va chercher automatiquement s'il y a des mises à jour à faire sur vos paquets, et vous les propose. Plus simple d'utilisation qu'un apt-get update && apt-get upgrade && apt-get install paquet ? Hell yeah, pkg install paquet.

Bash

Bon, je veux un shell intéractif simple à utiliser. Je pourrais garder sh ou utiliser les nombreux shells déjà présents sous FreeBSD (csh et tsh par exemple). Je décide de rester sur Bash, plus parce que j'aime bien sh et que Bash me semble le plus proche de sa syntaxe originelle que les autres. Ça se fait en deux commandes :

pkg install bash
chsh -s /usr/local/bin/bash yomli

On vérifie bien que le tout a été pris en compte :

yomli:*:1001:1001:Yomli:/home/yomli:/usr/local/bin/bash

UTF-8

Avant la version 10, il semble qu'il ait été difficile d'installer un bon support UTF-8 en TTY sans recompiler le kernel. Maintenant, voici simplement la marche à suivre :

Donc je vois mes caractères accentués, c'est cool. Seul bémol : ee, l'éditeur concurrent de nano sous FreeBSD, ne semble toujours pas gérer l'UTF-8. J'ai eu beau chercher une solution, mes caractères accentués ne passent pas. C'est vraiment dommage, j'apprécie beaucoup ce petit éditeur, surtout lorsqu'on fait un alias avec son petit frère aee (advanced easy editor). Mais nano offrant la coloration syntaxique et le support des caractères accentués, le choix fut vite fait en ce qui concerne l'éditeur de base.

Éditeur avancé : Vim

Là, rien à dire. Vi, c'est cool, mais Vim, c'est mieux. Pas pour rien qu'il y a un m en plus. C'est en cherchant à transférer mon fichier de configuration par SSH que je suis tombé sur un os.

SSH

Le serveur SSH, chez FreeBSD, c'est offert à l'installation. Il suffit d'un petit sysrc SSHD_ENABLE=YES pour l'activer au boot. Jusque-là tout va bien. Mais mon Mint ne veut pas se connecter dessus, il ne semble pas voir le port :

Starting Nmap 6.40 ( http://nmap.org ) at 2015-07-19 00:47 CEST
Nmap scan report for 10.42.0.40
Host is up (0.00016s latency).
All 1000 scanned ports on 10.42.0.40 are filtered
MAC Address: 00:A0:D1:C5:A9:32 (Inventec)

Nmap done: 1 IP address (1 host up) scanned in 21.48 seconds

Donc je vérifie sous FreeBSD avec la commande sockstat | grep "22" :

root    sshd    1137    3   tcp4    *:22    *:*

Ok, pas de pare-feu d'installé pour le moment, le port semble ouvert. Je lance un nmap juste au cas où :

Starting Nmap 6.47 ( http://nmap.org ) at 2015-07-19 00:49 CEST
Nmap scan report for amilo (10.42.0.40)
Host is up (0.00043s latency).
Not shown: 999 closed ports
PORT    STATE   SERVICE
22/tcp  open    ssh

Oui, on est bien ouvert. Notons que nmap sous FreeBSD est ici 7 versions au-dessus de Linux Mint, tandis que sous Archlinux c'est équivalent (6.47-3 à l'heure où j'écris ces lignes).

Oh, mais j'avais oublié que j'avais lancé ipfw, l'un des trois pare-feu installés par défaut sous FreeBSD. Oui, vous avez bien lu, trois pare-feu installés, à vous de lancer celui qui a votre préférence. Il y a plusieurs manières d'ouvrir des ports de ipfw, je vais utiliser la plus simple que je connaisse :

sysrc firewall_myservices="22,80,443"
sysrc firewall_allowservices=any
service ipfw restart

Maintenant tout fonctionne.

fstab

Je ne sais même pas si ce système existe sous GNU/Linux, mais l'absence de dossier /dev/gpt sur ma bécane Mint me laisserait penser que non.

Créer une partition FAT32

Je zappe d'office NTFS. D'une parce que la doc et les forums ne sont pas très clairs à ce sujet, de deux parce qu'il est bien plus simple de faire une partition FAT32 avec les outils par défaut. Le but est d'avoir une simple partition de données récupérables sous un Linux ou un Windows en cas de sérieux crash.

On commence par créer une nouvelle partition de type MBR :

gpart add -s 500G -t mbr ada0

Puis on y crée un système de fichier en FAT32 :

newfs_msdos -F 32 /dev/ada0p7

Et voilà le travail.

Xorg

À ce stade, nous avons déjà une bonne base. Je pourrais très bien travailler comme ça (d'autant que j'aime bien travailler en TTY). On pourrait même s'en servir de serveur d'appoint (SSH, FTP, Web, etc.). Mais je suis bien le seul à en être capable à la maison, et la réhabilitation de portable passe nécessairement par une interface graphique, même sommaire.

J'installe donc xorg, HAL, puis Slim, LXDE et OpenBox (je resterai sur OpenBox pendant que les autres comptes iront sur LXDE).

La configuration se fait de manière similaire à celle sous Linux.

Je lance et me retrouve avec un clavier en QWERTY. La résolution n'est pas bonne et le touchpad ne fonctionne pas. Je branche une souris USB sans fil, reconnue d'office (ça me ferra toujours marrer que mon matériel étiqueté Microsoft soit reconnu dans la seconde par HAL alors qu'il faut à Windows une à deux minutes pour aller chercher les pilotes…). Après quelques bidouilles, je tombe sur la solution pour passer le clavier en AZERTY.

Bien. Donc maintenant je peux lancer OpenBox en clavier AZERTY, mais comme le touchpad ne fonctionne pas et que je viens de désactiver l'auto-détection et l'auto-montage de HAL (en bref, le faire fonctionner pour rien), je ne peux pas utiliser ma souris USB. Je me rends compte les touchpads autres que Synaptics ne sont pas supportés sous FreeBSD, je dois donc trouver un moyen de monter automatiquement ma souris sans HAL.

J'ai tenté quelques essais à base d'automount, mais rien de bien concluant. J'ai supprimé, édité, renommé les policy de HAL, en vain. Agacé, je me demandais s'il ne serait pas plus rapide d'installer Gnome et de le laisser gérer le tout. Je me souviens d'un billet de Frederic Bezies où il montre la faible utilisation de mémoire de Mate sous FreeBSD m'a convaincu. J'ai donc installé Mate, et au lancement je me retrouve avec ça :

The path for the directory containing caja settings need read and write permissions:/home/yomli/.config/caja

D'accord. Je me connecte au SSH en parallèle, un petit chown yomli:yomli .config/ règle le problème. Me voilà connecté et… Le clavier est toujours en QWERTY ! Cette fois-ci, je peux changer l'agencement dans les préférences de Mate, ce que ne me permettaient ni Openbox ni LXDE. Et le plus beau ? Le tout ne pèse que 53 Mo en mémoire.

Je n'avais pas testé Mate, l'interface me rappelle mes premiers essais Linux (ah, j'ai encore les CD gratuits du Héron Hardi…), ce qui n'est pas pour me déplaire.

Remplacer le terminal par défaut : une galère

Encore une fois, je prends le clavier pour raconter quelque mésaventure dans le monde merveilleux du logiciel libre…

J'ai plusieurs terminaux virtuels, que j'utilise selon le besoin. URxvt lorsque je lance Vim, Terminator quand je ne veux pas me prendre la tête avec screen ou byobu, Guake en cas de besoin rapide et pendant longtemps… Mon préféré, c'est Sakura. Pour le nom, déjà (qui va admirablement bien avec byobu), mais également pour sa légèreté : 3 Mo d'empreinte mémoire au lancement, lorsque gnome-terminal et Urxvt en prennent respectivement 8 et 12.

Sous Linux Mint, il est possible de changer le terminal par défaut avec Applications favorites. C'est cool, rapide, parfait. Ça évite la bonne vieille commande sudo update-alternatives --config x-terminal-emulator qui est, de toute manière, détournée par Gnome.

Voilà donc Sakura en terminal par défaut, le raccourci clavier Ctrl+Alt+T l'ouvre bien, de même que la majorité de mes applications (au hasard, Thunar par exemple). Mais pas Nemo, le gestionnaire de fichiers de Cinnamon. L'action Ouvrir dans un terminal ne fait rien. J'ouvre Nautilus, puisque Nemo en est un fork, pour constater que là, Nautilus ne lance que Gnome-terminal.

Je passe sur les recherches effectuées pour tenter de résoudre le problème (gconf, nemo-actions, gnome-terminal.wrapper…). Un post de 2013 sur askubuntu répond à la question. Je traduis librement :

Détails : nautilus-open-terminal utilise GAppInfo pour lancer le processus de terminal. Or, GAppInfo va chercher dans une liste d'émulateurs de terminal qui est codée en dur : https://git.gnome.org/browse/glib/tree/gio/gdesktopappinfo.c#n2467

Solution :

  1. Supprimer gnome-terminal : sudo apt-get remove gnome-terminal
  2. Faire un lien symbolique vers gnome-terminal : sudo ln -s /usr/bin/sakura /usr/bin/gnome-terminal

Oui, on marche sur la tête. Au lieu de ne serait-ce qu'ajouter un if pour aller chercher x-terminal-emulator, une solution quasi-standard, on se retrouve à devoir désactiver gnome-terminal… Et le plus beau, c'est que le bug remonte à 2010 !

PIA utilise des DNS menteurs

On m'a rapporté que Private Internet Access, le VPN qui sponsorise Linux Mint, utilise des DNS menteurs… Des sites comme Kickass Torrents n'existent pas, selon eux :

$ ping kat.cr
ping: unknown host kat.cr

C'est bien connu de leurs utilisateurs Linux, le client officiel PIA change le fichier /etc/resolv.conf pour y insérer ses propres DNS lors de la connexion, avant de le remettre à son état d'origine à la déconnexion :

nameserver 209.222.18.222
nameserver 209.222.18.218

Ça pose non seulement le problème du DNS menteur, mais également celui de dnsmasq (cache local des requêtes DNS) ou de son propre DNS installé en réseau local. Sans parler du fait que ces serveurs sont localisés aux États-Unis, le temps de réponse est loin d'être optimal. Du coup, comment outrepasser cela ?

Modifier le comportement du gestionnaire beta

Mon raisonnement était simple : le gestionnaire est un script, on le modifie pour ne pas changer resolv.conf, problème réglé. Mais ce n'est pas aussi simple. Le client officiel est installé dans ~/.pia_manager/. En se baladant un peu, on voit que c'est du Ruby, on essaie d'en ouvrir un et…

"Ruby script '"+__FILE__+"' is protected by RubyEncoder and requires a RubyEncoder loader to be installed.

Hum. Pas cool.

Ne pas utiliser le client beta

La seconde solution qui vient à l'esprit est d'utiliser la connexion en PPTP, telle que décrite dans le support. Eh, on peut même utiliser l'OpenVPN. Bon, sur certaines machines ce n'est pas aussi simple à installer, et l'on perd la connexion automatique au démarrage, mais on y gagne quelques 400 Mo de disque et 200 Mo de RAM, ce qui n'est pas rien…

Problème avec Linux Mint 17.2 : la connexion en OpenVPN ne se fait pas parce qu'il n'y « a pas de secrets VPN valides ». Pas de prompt de mot de passe. Il semble que ce soit un problème récurrent sous dérivés d'Ubuntu 14.04 (qui n'est pas officiellement supportée par PIA, alors que la 12.04 l'est… Grrrr, 3 ans de retard, c'est une éternité, on dirait le support Steam).

La solution est assez simple, en plus du paquet network-manager-openvpn il faut le paquet network-manager-openvpn-gnome :

sudo apt-get install network-manager-openvpn-gnome

Et on a enfin un prompt pour le mot de passe !

Le fichier /etc/resolv.conf n'est pas modifié, problème résolu :

nameserver 127.0.0.1
nameserver 80.67.169.12
nameserver 80.67.188.188

Donc, ça marche, mais quelques points noirs :

  1. Il faudra enregistrer le mot de passe. Pour chacune des connexions. Cinq bonnes minutes de setup, ça reste raisonnable.
  2. La connexion n'est pas automatique au démarrage. Il est cependant possible de la lancer automatiquement lors d'une connexion wifi, mais cela se fait réseau par réseau.
  3. Possible DNS leak. J'invite à vérifier avec un outil en ligne que vous n'êtes pas sujet à ce problème.

On s'amuse à faire un ping sur un domaine bloqué :

$ ping kat.cr
PING kat.cr (195.3.147.99) 56(84) bytes of data.
^C
--- kat.cr ping statistics ---
27 packets transmitted, 0 received, 100% packet loss, time 26199ms

Voilà, donc outre le DNS menteur, les IP semblent bloquées également. Oui, les 8 qu'utilise Kickass. The Pirate Bay, lui, fonctionne correctement…

EDIT 15 septembre 2015 : Certains sites comme Kickass ne sont plus bloqués au niveau IP.

Configuration de Conky

Pour fonctionner, il nécessite que les fichier ip.sh et rhythmbox.sh soient présents dans le dossier ~/.conky et exécutables. Il ne faut pas oublier d'installer les polices Open Logos et StyleBats.

Copie de ip.sh :


	#!/bin/bash



# # Test de validité IPv4 de l'adresse entrée (expression régulière)

function isIPv4 {

 if [ $# = 1 ]

 then

  printf $1 | grep -Eq '^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-4]|2[0-4][0-9]|[01]?[1-9][0-9]?)$'

  return $?

 else

  return 2

 fi

}



RETOUR=$(wget -qO- whatismyip.org)



isIPv4 $RETOUR && echo $RETOUR || echo "Pas de connexion"
	
Copie de rhythmbox.sh :

	#!/bin/bash





case "$1" in



progress)

    curr=`rhythmbox-client --no-start --print-playing-format "%te" | grep -v "Pas de lecture en cours" | grep -v Inconnu`

    tot=`rhythmbox-client --no-start --print-playing-format "%td" | grep -v "Pas de lecture en cours" | grep -v Inconnu`

    a=`date +'%S' | sed 's/^0\+//'`

if [ "$a" = "" ]; then

    a=0

fi

    b=$(( ($a*100) / 30 ))

    c=$(( 200-$b ))

if [ "$curr" = "" ]; then

    curr=0

fi

#si pas de durée totale, augmente pendant les 30 premieres secondes puis diminue pendant les 30 suivantes...

    if [ "$tot" = "" ]; then 

    if [ $a -le 30 ]; then

       expr $b

    else

       expr $c

    fi

    else

#Si durée totale déterminée, il faut traiter le retour de la commande donnant $curr (pour courant et $tot pour total, logique) qui renvoit une donnée sous la forme hh:mm:ss

    d="1"

    nbcurr=`echo $curr | wc -m`       #nbr de caractères permet de déterminer si il y a seulement m:ss ou si il y a h:mm:ss (au minimum, m:ss)

    posm=$(( $nbcurr-5 ))             #pour faire une commande cut générique, il faut définir l'endroit ou on coupe d'ou posx (position des minutes ici)

if [ $posm -lt $d ]; then

posm=``                               #Si position inférieur à 1, renvoit variable vide pour ne pas bloque cut

fi

    posm2=$(( $nbcurr-4 ))            #Forcément 1 indication minute (minimum)= pas besoin de vérifier si >1

    posh=$(( $nbcurr-8 ))             #Idem pour les heures

if [ $posh -lt $d ]; then

posh=``

fi

    posh2=$(( $nbcurr-7 ))

    currs=`echo $curr | tail -c3 | sed 's/^0\+//'` # Récupération des secondes forcément à la fin et supression du premier 0 pour ne pas avoir de problème de base (08 en hexa ou base 10)

if [ "$currs" = "" ]; then

    currs=0                          #si uniquement des zeros, ils sont tous supprimé donc redonner la valeur

fi

    currma=`echo $curr | cut -c$posm-$posm2 | sed 's/^0\+//'`

if [ "$currma" = "" ]; then

    currma=0                         #idem pour minutes

fi

    currm=$(( $currma*60 ))          #conversion en secondes

if [ $posh2 -lt $d ]; then

currh=0

else

    currha=`echo $curr | cut -c$posh-$posh2 | sed 's/^0\+//'`

if [ "$currha" = "" ]; then         #idem heures

    currha=0

fi

currh=$(( $currha*3600 ))          # conversion en secondes

fi



    currt=$(( ($currh+$currm) + $currs )) #calcule du nombre de secondes total



    nbtot=`echo $tot | wc -m`      #Même schema pour la suite mais avec la durée totale

    tposm=$(( $nbtot-5 ))

if [ $tposm -lt $d ]; then

tposm=``

fi

    tposm2=$(( $nbtot-4 ))

    tposh=$(( $nbtot-8 ))

if [ $tposh -lt $d ]; then

tposh=``

fi

    tposh2=$(( $nbtot-7 ))

    tots=`echo $tot | tail -c3 | sed 's/^0\+//'` ## OK

if [ "$tots" = "" ]; then

    tots=0

fi

    totma=`echo $tot | cut -c$tposm-$tposm2 | sed 's/^0\+//'` ## OK

if [ "$totma" = "" ]; then

    totma=0

fi

    totm=$(( $totma*60 )) ## OK

if [ $tposh2 -lt $d ]; then

toth=0

else

    totha=`echo $tot | cut -c$tposh-$tposh2 | sed 's/^0\+//'` ## OK

if [ "$totha" = "" ]; then

    totha=0

fi

toth=$(( $totha*3600 )) ## OK

fi



    tott=$(( ($toth+$totm) + $tots )) ## OK

        expr $currt \* 100  / $tott    #Et finalement expression du pourcentage accompli

    fi

    ;;



esac
	

Copie du .conkyrc :


	# set to yes if you want Conky to be forked in the background

background yes



cpu_avg_samples 2

net_avg_samples 2



out_to_console no



# X font when Xft is disabled, you can pick one with program xfontsel

#font 7x12

#font 6x10

#font 7x13

#font 8x13

#font 7x12

#font *mintsmild.se*

#font -*-*-*-*-*-*-34-*-*-*-*-*-*-*

#font -artwiz-snap-normal-r-normal-*-*-100-*-*-p-*-iso8859-1



# Use Xft?

use_xft yes



# Xft font when Xft is enabled

xftfont Bitstream Vera Sans Mono:size=9



own_window_transparent yes

own_window_type override

own_window_hints  undecorated,below,sticky,skip_taskbar,skip_pager

own_window_colour hotpink

# Text alpha when using Xft

xftalpha 0.8



on_bottom yes



# mail spool

mail_spool $MAIL



# Update interval in seconds

update_interval 1

# Create own window instead of using desktop (required in nautilus)

own_window yes



# Use double buffering (reduces flicker, may not work for everyone)

double_buffer yes



# Minimum size of text area

#minimum_size 280 5

#maximum_width 150



# Draw shades?

draw_shades yes



# Draw outlines?

draw_outline no



# Draw borders around text

draw_borders no



# Stippled borders?

stippled_borders 10



# border margins

border_margin 4



# border width

border_width 1



# Default colors and also border colors

default_color white

default_shade_color black

default_outline_color white



# Text alignment, other possible values are commented

#alignment top_left

#minimum_size 10 10

gap_x 13

gap_y 34

alignment top_right

#alignment bottom_left

#alignment bottom_right



# Gap between borders of screen and text



# Add spaces to keep things from moving about?  This only affects certain objects.

use_spacer no



# Subtract file system buffers from used memory?

no_buffers yes



# set to yes if you want all text to be in uppercase

uppercase no



# boinc (seti) dir

# seti_dir /opt/seti



# Possible variables to be used:

#

#      Variable         Arguments                  Description                

#  acpiacadapter                     ACPI ac adapter state.                   

#  acpifan                           ACPI fan state                           

#  acpitemp                          ACPI temperature.                        

#  adt746xcpu                        CPU temperature from therm_adt746x       

#  adt746xfan                        Fan speed from therm_adt746x             

#  battery           (num)           Remaining capasity in ACPI or APM        

#                                    battery. ACPI battery number can be      

#                                    given as argument (default is BAT0).     

#  buffers                           Amount of memory buffered                

#  cached                            Amount of memory cached                  

#  color             (color)         Change drawing color to color            

#  cpu                               CPU usage in percents                    

#  cpubar            (height)        Bar that shows CPU usage, height is      

#                                    bar's height in pixels                   

#  downspeed         net             Download speed in kilobytes              

#  downspeedf        net             Download speed in kilobytes with one     

#                                    decimal                                  

#  exec              shell command   Executes a shell command and displays    

#                                    the output in torsmo. warning: this      

#                                    takes a lot more resources than other    

#                                    variables. I'd recommend coding wanted   

#                                    behaviour in C and posting a patch :-).  

#  execi             interval, shell Same as exec but with specific interval. 

#                    command         Interval can't be less than              

#                                    update_interval in configuration.        

#  fs_bar            (height), (fs)  Bar that shows how much space is used on 

#                                    a file system. height is the height in   

#                                    pixels. fs is any file on that file      

#                                    system.                                  

#  fs_free           (fs)            Free space on a file system available    

#                                    for users.                               

#  fs_free_perc      (fs)            Free percentage of space on a file       

#                                    system available for users.              

#  fs_size           (fs)            File system size                         

#  fs_used           (fs)            File system used space                   

#  hr                (height)        Horizontal line, height is the height in 

#                                    pixels                                   

#  i2c               (dev), type, n  I2C sensor from sysfs (Linux 2.6). dev   

#                                    may be omitted if you have only one I2C  

#                                    device. type is either in (or vol)       

#                                    meaning voltage, fan meaning fan or temp 

#                                    meaning temperature. n is number of the  

#                                    sensor. See /sys/bus/i2c/devices/ on     

#                                    your local computer.                     

#  kernel                            Kernel version                           

#  loadavg           (1), (2), (3)   System load average, 1 is for past 1     

#                                    minute, 2 for past 5 minutes and 3 for   

#                                    past 15 minutes.                         

#  machine                           Machine, i686 for example                

#  mails                             Mail count in mail spool. You can use    

#                                    program like fetchmail to get mails from 

#                                    some server using your favourite         

#                                    protocol. See also new_mails.            

#  mem                               Amount of memory in use                  

#  membar            (height)        Bar that shows amount of memory in use   

#  memmax                            Total amount of memory                   

#  memperc                           Percentage of memory in use              

#  new_mails                         Unread mail count in mail spool.         

#  nodename                          Hostname                                 

#  outlinecolor      (color)         Change outline color                     

#  pre_exec          shell command   Executes a shell command one time before 

#                                    torsmo displays anything and puts output 

#                                    as text.                                 

#  processes                         Total processes (sleeping and running)   

#  running_processes                 Running processes (not sleeping),        

#                                    requires Linux 2.6                       

#  shadecolor        (color)         Change shading color                     

#  stippled_hr       (space),        Stippled (dashed) horizontal line        

#                    (height)        

#  swapbar           (height)        Bar that shows amount of swap in use     

#  swap                              Amount of swap in use                    

#  swapmax                           Total amount of swap                     

#  swapperc                          Percentage of swap in use                

#  sysname                           System name, Linux for example           

#  time              (format)        Local time, see man strftime to get more 

#                                    information about format                 

#  totaldown         net             Total download, overflows at 4 GB on     

#                                    Linux with 32-bit arch and there doesn't 

#                                    seem to be a way to know how many times  

#                                    it has already done that before torsmo   

#                                    has started.                             

#  totalup           net             Total upload, this one too, may overflow 

#  updates                           Number of updates (for debugging)        

#  upspeed           net             Upload speed in kilobytes                

#  upspeedf          net             Upload speed in kilobytes with one       

#                                    decimal                                  



#  uptime                            Uptime                                   

#  uptime_short                      Uptime in a shorter format               

#

#  seti_prog                         Seti@home current progress

#  seti_progbar      (height)        Seti@home current progress bar

#  seti_credit                       Seti@hoome total user credit





# variable is given either in format $variable or in ${variable}. Latter

# allows characters right after the variable and must be used in network

# stuff because of an argument

#${font Dungeon:style=Bold:pixelsize=10}I can change the font as well

#${font Verdana:size=10}as many times as I choose

#${font Perry:size=10}Including UTF-8,

#${font Luxi Mono:size=10}justo como este texto que o google traduz fêz o português

# stuff after 'TEXT' will be formatted on screen

#${font Grunge:size=12}${time %a  %b  %d}${alignr -25}${time %k:%M}



TEXT

${shadecolor black}${font openlogos:size=100}${color 73d216}${alignc}Ut${font}${color}${shadecolor}

${font Arial:size=20}${color 73d216}${alignc}Marvin${color}${font}



${color 73d216}Système ${color}$hr

${font StyleBats:size=10}P${font} Uptime: $uptime

${font StyleBats:size=10}A${font} Processeur : ${cpu}% ${color 73d216}${cpubar}$color

${font StyleBats:size=10}I${font} Mémoire : $memperc%  $mem	${color 73d216}${membar}$color

${font StyleBats:size=10}I${font} Swap :$swapperc%  ${color 73d216}${swapbar}$color

${font StyleBats:size=10}U${font} Batterie : $battery_percent%  $battery_time



${color 73d216}Disque dur ${color}$hr

${font StyleBats:size=10}C${font} Racine : ${fs_used_perc /}% ${fs_free /} ${color 73d216}${fs_bar 5,120 /}$color

${font StyleBats:size=10}C${font} ${if_mounted /home}Home : ${fs_used_perc /home}% ${fs_free /home} ${color 73d216}${fs_bar 5,120 /home}$color

${font StyleBats:size=10}C${font} ${if_mounted /media/donnees}Données : ${fs_used_perc /media/donnees}% ${fs_free /media/donnees} ${color 73d216}${fs_bar 5,120 /media/donnees}$color



${color 73d216}Réseau ${color}$hr

${font StyleBats:size=10}M${font} eth0 : ${addr eth0}

${font StyleBats:size=10}X${font} wlan0 : ${addr wlan0}

${font StyleBats:size=10}B${font} inet0 : ${texeci 120 $HOME/.conky/ip.sh}



#${if_running rhythmbox}${color 73d216}Multimédia ${color}$hr

#${font StyleBats:size=10}2${font} Artiste : ${exec rhythmbox-client --print-playing-format "%ta"}

#${font StyleBats:size=10}J${font} Album : ${exec rhythmbox-client --print-playing-format "%at"}

#${font StyleBats:size=10}4${font} Titre : ${exec rhythmbox-client --print-playing-format "%tt"}

#${font StyleBats:size=10}7${font} Durée : ${exec rhythmbox-client --print-playing-format "%te"} sur ${exec rhythmbox-client --print-playing-format "%td"}

#${color 73d216}${execibar 1 $HOME/.conky/rhythmbox.sh progress}${color}${else}

#$endif
	
Lancement au démarrage

Lancer la commande :


sh -c "sleep 20; conky;"
	

Du screencast sous GNU/Linux partie 4

Le script screencaster.sh final qui semble fonctionner sur toute Buntu et dérivée, pour peu que l'on se conforme aux notes :

#!/bin/bash
#
# screencaster.sh - script to make screencasts on Linux 
#
# For information about using this script:
# http://okiebuntu.homelinux.com/blog/?p=175
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 3, as published
# by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranties of
# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
# PURPOSE.  See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program.  If not, see <http://www.gnu.org/licenses/>.
# Nécessite libavcodec-extra-52
# Il faut peut-être ffmpeg depuis le dépôt Medibuntu. Il faudra aussi ajouter un peu de code pour faire en sorte que la taille et l'offset soit divisible par deux
# parec a besoin d'un monitor pour fonctionner : trouver un input avec pactl list | egrep -A2 '^(\*\*\* )?Source #'
# On peut arrêter l'enregistrement en configurant un raccourci clavier et en utilisant xdotool : xdotool search --onlyvisible --classname "gnome-terminal" key "Return"
#

# Config
monitor="alsa_output.pci-0000_00_1b.0.analog-stereo.monitor"
echo "set-source-mute ${monitor} false" | pacmd >/dev/null
threads=2
volume=0.25

# list of programs we depend on
progs="xdpyinfo grep head sed ffmpeg pacat parec sox libavcodec-extra-52"

# check for programs we depend on
result=0
for prog in $progs
do
  type -p $prog > /dev/null
  if (( $? != 0 )); then
    echo "Error: Cannot find required program '$prog'"
    result=1
  fi
done
if (( $result != 0 )); then
  exit 1
fi

screenSize="$(xwininfo -root | grep 'geometry' | awk '{print $2;}')" # default if we cant detect it
screenOffset="0,0" # default to top-left corner
frameRate="24" # default frame rate
baseName="`date +%Y%m%d`-`date +%H%M%S`-screencast" # default base filename for capture

# attempt to detect the dimension of the screen for the default
dimensions=`xdpyinfo | grep 'dimensions:' | head -1 | \
  sed -e 's/^.* \([0-9]\+x[0-9]\+\) pixels.*$/\1/'`
if [[ "$dimensions" =~ [0-9]+x[0-9]+ ]]; then
  screenSize=$dimensions
fi

# collect command line settings
while getopts 'hs:o:t:r:p:w' param ; do
  case $param in
    s)
      screenSize="$OPTARG"
      ;;
    o)
      screenOffset="$OPTARG"
      ;;
    t)
      timeToRecord="$OPTARG"
      ;;
    w)
      INFO=$(xwininfo)
      WIN_GEO=$(echo $INFO | grep -oEe 'geometry [0-9]+x[0-9]+' | grep -oEe '[0-9]+x[0-9]+')
      WIN_XY=$(echo $INFO | grep -oEe 'Corners:\s+\+[0-9]+\+[0-9]+' | grep -oEe '[0-9]+\+[0-9]+' | sed -e 's/\+/,/' )
      screenOffset="$WIN_XY"
      screenSize="$WIN_GEO"
      ;;
    r)
      frameRate="$OPTARG"
      ;;
    *)
      echo ""
      echo "$0 - records screencast"
      echo ""
      echo "$0 [options] [base-filename]"
      echo ""
      echo "options:"
      echo "	-h            show brief help"
      echo "	-s <size>     screensize to record as <width>x<height>"
      echo "	-o <offset>   offset off recording area as <xoffset>,<yoffset>"
      echo "	-t <time>     time to record (in seconds)"
      echo "	-w	      window to record"
      echo "	-r	      framerate (FPS)"
      echo ""
      exit 0
      ;;
  esac
done

shift $(( $OPTIND - 1 ))

# determine basename of files
if [ -n "$1" ] ; then
  baseName="$1"
fi

echo ""
echo "Size = $screenSize"
echo "Offset = $screenOffset"
echo "Rate = $frameRate"
echo "Filename = $baseName"

# get ready to start recording
echo ""
if [ -n "$timeToRecord" ]; then
  echo "Preparing to capture for $timeToRecord seconds."
else
  echo "Preparing to capture."
  echo "Press ENTER when finished capturing."
fi
sleep 3
echo ""

# start playing silence to make sure there is always audio flowing
pacat /dev/zero &
pidSilence=$!

# starts recording video using x11grab to make mpeg2video
ffmpeg -f alsa -ac 2 -i pulse \
       -f x11grab -r "$frameRate" -s "$screenSize" -i :0.0+"$screenOffset" \
       -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast \
       -threads "$threads" -y "$baseName.avi" &
pidVideo=$!

#ffmpeg -y -an \
#  -s "$screenSize" -r "$frameRate" -f x11grab -i :0.0+"$screenOffset" \
#  -s "$screenSize" -r "$frameRate" -aspect 4:3 -vcodec mpeg2video -sameq \
#  -f mpeg2video "$baseName.mpeg" &
#pidVideo=$!

# starts recording raw audio from output
parec -d "$monitor" --format=s16le --rate=44100 --channels=2 "$baseName-audio.raw" &
pidAudio=$!

# starts recording raw audio from input
rec -b 32 -r 44100 "$baseName-voice.wav" &
pidMicro=$!

echo ""
echo "Video recording started with process ID $pidVideo"
echo "Audio recording started with process ID $pidAudio"
echo "Voice recording started with process ID $pidMicro"
echo ""

# wait for recording to be done, either by timer or user hitting enter
if [ -n "$timeToRecord" ]; then
  sleep "$timeToRecord"
else
  read nothing
fi

# stop recordings
echo ""
echo "Terminating recordings ..."
kill -15 $pidVideo $pidAudio 
kill -15 $pidSilence
kill -15 $pidMicro
wait

# filter and normalize the audio
echo "" 
echo "Filtering and normalizing sound ..." 
sox --norm -s -b 16 -L -r 44100 -c 2 -v "$volume" "$baseName-audio.raw" "$baseName-audio.wav"  highpass 65 lowpass 12k
sox -v "$volume" "$baseName-audio.wav" "$baseName-audio2.wav"
sox --norm -s -b 32 -L -r 44100 -c 2 -v 2.0 "$baseName-voice.wav" "$baseName-voice2.wav"  highpass 65 lowpass 12k

# Récupère le son du microphone
#echo ""
#echo "Extract audio from avi"
#ffmpeg -i "$baseName.avi" -ar 44100 -ac 2 "$baseName-2.wav"

# encode video and audio into mp4 file
echo "" 
echo "Encoding to final Youtube format..." 
sox "$baseName-audio2.wav" "$baseName-voice2.wav" -m "$baseName-final.wav"

ffmpeg -i "$baseName-final.wav" -acodec libfaac -ab 320k -y "$baseName-final.aac"

ffmpeg -i "$baseName.avi" -an -s 1280x720 -aspect 16:9 -acodec libfaac -ab 320k -vcodec libx264 -vpre fast -crf 18 -threads "$threads" -y "$baseName.mp4"

ffmpeg -isync -i "$baseName-final.aac" -i "$baseName.mp4" -s 1280x720 -aspect 16:9 -acodec libfaac -ab 320k -vcodec libx264 -vpre fast -crf 18 -threads "$threads" -y  "$baseName-final.mp4" 

#ffmpeg -isync -i "$baseName.wav" -i "$baseName.mpeg" -acodec mp2 -ab 192k -vcodec copy "$baseName.avi"

# convert to ogg - to turn on uncomment next three lines
#echo""
#echo "convert to theora"
#ffmpeg2theora "$baseName.avi" -o "$baseName.ogv"

# convert avi to flv - to turn on uncomment next three lines
#echo""
#echo "convert to theora"
# ffmpeg -i "$baseNamee.avi" -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv  "$baseNamee.flv"

echo ""
echo "DONE! Final media written in file $baseName.mp4"

echo ""
exit 0

Voilà, prochaine étape : un peu de python pour donner une interface simple. À noter que sous Gnome 3, un outil de screencast est incorporé d'office, via un raccourci-clavier dont personne ne se souvient, et qui n'est pas paramétrable ; il prend tout l'écran. Ma solution permet au moins de lancer un screencast à distance, selon des paramètres (30fps pour une vidéo en HD, c'est un must), et surtout de choisir une fenêtre d'un simple clic.

Du screencast sous GNU/Linux partie 3

Une solution m'est apparue : ffmpeg, que j'avais dénigré jusqu'ici, est en réalité la meilleure façon de faire un screencast sous GNU/Linux. Qualité vidéo irréprochable, post-traitement (dont une conversion en mp4 HD pour Youtube…), enregistrement des sons et du micro en parallèle, et la cerise sur le gâteau : tout est en ligne de commande.

Je me suis servi du script screencaster disponible ici sous licence GPL en le mixant un peu à ma sauce. Il reste donc sous licence GPL, mais n'a été testé que sous Ubuntu et dérivées jusqu'à présent. À ce titre, il nécessite libavcodec-extra-52, mais aussi ffmpeg du dépôt Medibuntu. Le reste des dépendances s'installe d'un simple sudo apt-get install xdpyinfo grep head sed pacat parec sox.

Quant à l'utilisation, il suffit de le lancer avec l'option -h pour comprendre assez rapidement. L'option -w fait apparaitre un curseur, il n'y a plus qu'à cliquer sur la fenêtre de votre choix pour lancer l'enregistrement. Terminez alors l'enregistrement en tapant Entrée. Il existe une petite astuce pour éviter d'avoir à revenir sur la console pour arrêter l'enregistrement, et donc devoir couper la vidéo en post-prod : on peut arrêter l'enregistrement en configurant un raccourci clavier et en utilisant xdotool : xdotool search --onlyvisible --classname "gnome-terminal" key "Return".


#!/bin/bash
#
# screencaster.sh - script to make screencasts on Linux 
#
# For information about using this script:
# http://www.guillaume.litaudon.fr/blog/
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 3, as published
# by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranties of
# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
# PURPOSE.  See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program.  If not, see <http://www.gnu.org/licenses/>.

# list of programs we depend on
progs="xdpyinfo grep head sed ffmpeg pacat parec sox"

# check for programs we depend on
result=0
for prog in $progs
do
  type -p $prog > /dev/null
  if (( $? != 0 )); then
    echo "Error: Cannot find required program '$prog'"
    result=1
  fi
done
if (( $result != 0 )); then
  exit 1
fi

screenSize="$(xwininfo -root | grep 'geometry' | awk '{print $2;}')" # default if we cant detect it
screenOffset="0,0" # default to top-left corner
frameRate="24" # default frame rate
baseName="`date +%Y%m%d`-`date +%H%M%S`-screencast" # default base filename for capture

# attempt to detect the dimension of the screen for the default
dimensions=`xdpyinfo | grep 'dimensions:' | head -1 | \
  sed -e 's/^.* \([0-9]\+x[0-9]\+\) pixels.*$/\1/'`
if [[ "$dimensions" =~ [0-9]+x[0-9]+ ]]; then
  screenSize=$dimensions
fi

# collect command line settings
while getopts 'hs:o:t:r:p:w' param ; do
  case $param in
    s)
      screenSize="$OPTARG"
      ;;
    o)
      screenOffset="$OPTARG"
      ;;
    t)
      timeToRecord="$OPTARG"
      ;;
    w)
      INFO=$(xwininfo)
      WIN_GEO=$(echo $INFO | grep -oEe 'geometry [0-9]+x[0-9]+' | grep -oEe '[0-9]+x[0-9]+')
      WIN_XY=$(echo $INFO | grep -oEe 'Corners:\s+\+[0-9]+\+[0-9]+' | grep -oEe '[0-9]+\+[0-9]+' | sed -e 's/\+/,/' )
      screenOffset="$WIN_XY"
      screenSize="$WIN_GEO"
      ;;
    r)
      frameRate="$OPTARG"
      ;;
    *)
      echo ""
      echo "$0 - records screencast"
      echo ""
      echo "$0 [options] [base-filename]"
      echo ""
      echo "options:"
      echo "	-h            show brief help"
      echo "	-s <size>     screensize to record as <width>x<height>"
      echo "	-o <offset>   offset off recording area as <xoffset>,<yoffset>"
      echo "	-t <time>     time to record (in seconds)"
      echo "	-w	      window to record"
      echo "	-r	      framerate (FPS)"
      echo ""
      exit 0
      ;;
  esac
done

shift $(( $OPTIND - 1 ))

# determine basename of files
if [ -n "$1" ] ; then
  baseName="$1"
fi

echo ""
echo "Size = $screenSize"
echo "Offset = $screenOffset"
echo "Rate = $frameRate"
echo "Filename = $baseName"

# get ready to start recording
echo ""
if [ -n "$timeToRecord" ]; then
  echo "Preparing to capture for $timeToRecord seconds."
else
  echo "Preparing to capture."
  echo "Press ENTER when finished capturing."
fi
sleep 3
echo ""

# start playing silence to make sure there is always audio flowing
pacat /dev/zero &
pidSilence=$!

# starts recording video using x11grab to make mpeg2video
ffmpeg -f alsa -ac 2 -i pulse \
       -f x11grab -r "$frameRate" -s "$screenSize" -i :0.0+"$screenOffset" \
       -acodec pcm_s16le -vcodec libx264  -vpre lossless_ultrafast \
       -threads 0 -y "$baseName.mkv" &
pidVideo=$!

#ffmpeg -y -an \
#  -s "$screenSize" -r "$frameRate" -f x11grab -i :0.0+"$screenOffset" \
#  -s "$screenSize" -r "$frameRate" -aspect 4:3 -vcodec mpeg2video -sameq \
#  -f mpeg2video "$baseName.mpeg" &
#pidVideo=$!

# starts recording raw audio
parec -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor --format=s16le --rate=44100 --channels=2 "$baseName.raw" &
pidAudio=$!

echo ""
echo "Video recording started with process ID $pidVideo"
echo "Audio recording started with process ID $pidAudio"
echo ""

# wait for recording to be done, either by timer or user hitting enter
if [ -n "$timeToRecord" ]; then
  sleep "$timeToRecord"
else
  read nothing
fi

# stop recordings
echo ""
echo "Terminating recordings ..."
kill -15 $pidVideo $pidAudio 
kill -15 $pidSilence
wait

# filter and normalize the audio
echo "" 
echo "Filtering and normalizing sound ..." 
sox --norm -s -b 16 -L -r 44100 -c 2 -v 0.33 "$baseName.raw" "$baseName.wav"  highpass 65 lowpass 12k

# Récupère le son du microphone
echo ""
echo "Extract audio from mkv"
ffmpeg -i "$baseName.mkv" -ar 44100 -ac 2 "$baseName-2.wav"

# encode video and audio into mp4 file
echo "" 
echo "Encoding to final Youtube format..." 
sox "$baseName.wav" "$baseName-2.wav" -m -p gain | ffmpeg -f sox -i - -i "$baseName.mkv" -s 1280x720 -aspect 16:9 -vcodec libx264 -vpre fast -crf 18 -threads 0 -acodec libfaac -ab 320k -y "$baseName.mp4"

#ffmpeg -isync -i "$baseName.wav" -i "$baseName.mpeg" -acodec mp2 -ab 192k -vcodec copy "$baseName.avi"

# convert to ogg - to turn on uncomment next three lines
#echo""
#echo "convert to theora"
#ffmpeg2theora "$baseName.avi" -o "$baseName.ogv"

# convert avi to flv - to turn on uncomment next three lines
#echo""
#echo "convert to theora"
# ffmpeg -i "$baseNamee.avi" -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv  "$baseNamee.flv"

echo ""
echo "DONE! Final media written in file $baseName.mp4"

echo ""
exit 0

Du screencast sous GNU/Linux partie 2

Pour sélectionner une fenêtre avec RecordMyDesktop, il faut utiliser la version en ligne de commande et non la GUI. Tout est expliqué dans la page de man :

recordmydesktop --windowid  $(xwininfo -frame | grep 'xwininfo: Window id:' |  awk  '{print $4}')

Un autre logiciel permettant le screencast est Webcam Studio. Ce logiciel est fait à la base pour tout ce qui est opération de webcam sous GNU/Linux. Il est ainsi possible de faire passer comme webcam une fenêtre, mais aussi d'enregistrer la webcam. L'enregistrement étant fait à la volée, il en résulte un lag certain des applications comme Minecraft. Mais le fichier généré est du OGG valide qui fonctionne correctement sur tout lecteur compatible et d'une qualité qui peut valoir RecordMyDesktop. Il est quand même ahurissant qu'un logiciel qui n'a pas pour but de faire du screencast en fasse de meilleure qualité et de façon plus simple que les logiciels spécifiques !
Il reste un souci qui peut paraître mineur vu qu'il est contournable assez facilement, mais recordmydesktop ne permet pas d'enregistrer le son en duplex. Impossible donc d'avoir et les sons de Minecraft et les explications données au micro.
Une solution est donc d'enregistrer les sons avec recordmydesktop et le micro avec l'enregistreur de son classique, les deux étant synchronisés au montage.
Vu chez Dom web, xvidcap serait capable de résoudre ce problème. Seulement il refuse de s'installer chez moi car dépendant de libavcodec-extra-52. Sachant que j'avais cassé mon écran de veille et mes logiciels vidéo à cause de ce paquet en août dernier, je n'ai pas voulu tenter le diable et forcer comme une brute. Et le paquet donné sur Sourceforge a besoin de libtheora.so.0 et de libmp3lame.so.0 pour fonctionner et date de Jaunty… Qu'à cela ne tienne, j'installe manuellement les deux library disponible dans les dépots (getlibs ne trouvant pas de correspondance). Après toutes ces manipulations, je peux utiliser xvidcap qui est plus abouti que recordmydesktop. Là où RMD utilisait une visualisation minuscule pour spécifier une zone, xvidcap affiche une frame directement en aperçu. Il est même possible d'enregistrer directement en avi. L'enregistrement se fait à la volée, ce qui peut provoquer quelques lags. Par contre, évidemment, il faut savoir ce que l'on fait : la capture de son est personnalisable, sachant que le device par défaut est /dev/dsp. Autrement dit, le micro. J'ai donc fait toutes ces manipulations pour rien car, après recherches, il semble qu'il faille OSS ou Alsa pour arriver à quelque chose, alors avec mon pauvre Pulseaudio…
Voilà donc un aperçu du screencast sous GNU/Linux. Je n'ai pas traité de FFmpeg, vu qu'il est nécessaire de le recompiler, ça n'est pas fonctionnel out-of-the-box. Nous voilà coincé avec RMD, obligé d'enregistrer de deux manières différentes les sons micro et PC, ou bien d'utiliser une boucle matérielle pour envoyer les deux sur une même entrée. Que de manipulations, et je n'ai même pas essayé avec des jeux en plein écran !

Du screencast sous GNU/Linux

Il y a des soirs où l'on se demande si les coups de gueule réguliers de Cyrille Borne ne sont pas aussi injustes que cela.
Prenez le screencasting, cette technique servant à capturer l'écran, le son et la voix dans le but d'en faire une vidéo pour, mettons, un tutoriel sur l'utilisation de la hache dans Minecraft.
Pour élaborer ces vidéos, sous Windows, il existe le vénérable, célèbre et toujours vaillant FRAPS. Sous GNU/Linux, en revanche… Prenez la page consacrée sur la documentation ubuntu.
RecordMyDesktop étant intégré à RecordItNow, j'ai décidé de tester ce dernier en premier lieu. D'autant plus que la page de documentation à son sujet dit de lui qu'il produit des vidéos fluides. Certes, j'ai 4 Go de mémoire pour un i5 (quadricore, 2,3 GHz)… Eh bien la vidéo produite en OGV est défaillante. VLC refuse de la lire, et MPlayer montre une image toutes les 4 secondes. Or, le OGV est la seule possibilité de sortie de ce logiciel, les autres formats s'obtenant en encodant l'OGV originel de manière transparente avec Fmpeg ou Mencoder.
Ni une, ni deux, ni trois d'ailleurs, j'essaye Pongo, qui embarque Istanbul. Cette fois-ci, c'est Mplayer qui refuse de lire la vidéo, VLC la lisant sans trop de problèmes, hormis un fort ralentissement et un son saccadé.
Bien, testons donc Istanbul, vu qu'il possède un option pour les jeux en 3D. Oui, mais il plante lamentablement au moment où il demande où enregistrer.
Rien à dire de Kazam, il ne veut pas s'installer. J'ai passé l'âge de chercher à faire fonctionner des logiciels unstable.
Bon, passons à GTK-RecordMyDesktop, la GUI de RecordMyDesktop. Remarquons déjà la sélection de fenêtre tellement non-ergonomique (sélection sur la prévisualisation, celle-ci étant un rectangle de 100*50 environ) que je m'y suis pris à plusieurs fois pour pouvoir enregistrer une zone. Toujours un ogv en sortie. Mplayer le lit avec une neige informatique affreuse, VLC avec la plus haute perfection, y compris fluide. Bingo ! Hormis la sélection de fenêtre, GTK-RecordMyDesktop fait exactement ce que j'attends d'un logiciel de screencast : qu'il produise out-of-the-box une vidéo fluide. Reste à comprendre pourquoi RecordItNow, embarquant RecordMyDesktop, ne le fait pas ; sans doute le fait que la version du dépôt est obsolète y est-il pour quelque chose…
Alors, ceci est peut-être un billet d'humeur, et sans doute mon installation de Linux Mint joue quelque peu, mais tout de même ! Un logiciel fonctionnel pour cinq essayés !

Installation de Linux Mint sur Acer Aspire 5740G

Préambule

L'Acer Aspire 5740G-434G32MN

Configuration de la machine :

Processeur Intel Core i5 (2,26 GHz)
Mémoire vive 4 Go
Disque dur 320 Go
Carte graphique ATI Mobility Radeon HD 5470 (512 Mo)
Écran 15,6 pouces (1366x768px)
Carte wifi Atheros AR928X
Carte Bluetooth Broadcom
Divers Lecteur/Graveur DVD, Webcam Crystal Eye, batterie 6 cellules, sortie HDMI, micro intégré, lecteur de carte mémoire

Il était livré avec une version OEM de Windows Seven Home Premium que j'ai tout bonnement supprimé sans même y toucher. Aucun tatouage. Dans l'ensemble, belle finition, très silencieux.

Linux Mint

Utilisation de Linux Mint 9 Isadora en version x86_64 pour bénéficier des 4 Go de RAM de la bête.

Installation initiale

LiveUSB

Le boot sur le liveUSB est bon, aucun problème d'affichage détecté, juste une résolution un peu petite pour l'écran, vite corrigée par l'installation du driver propriétaire d'ATI proposé dès le départ. L'installation n'a posé aucun problème particulier.

Système de départ

C'est impressionnant comme le système tourne bien dès l'entrée de jeu. Les 4 threads du processeur sont reconnus nativement, ce n'est pas un scoop. Mais le wifi aussi, sans Ndiswrapper. Aucun souci au niveau du lecteur DVD. Même la webcam fonctionne out-of-the-box. Quant à l'affichage… Compiz Fusion ronronne tout seul. Quelques bémols cependant :

  • le clavier ne permet pas de faire de la typo ;
  • et il reste quatre touches sans importance à configurer ;
  • la carte bluetooth n'est pas reconnue, même après activation par le clavier ;
  • le touchpad, sensé être multitouch, ne l'est pas ;
  • ya encore un logo Windows sur le clavier, et une étiquette sur la carlingue ;)

Réglages généraux

Bluetooth

Après différents essais non-concluants avec acerhk et acer-wmi, aucune solution potable ne m'est apparue. En attendant d'ouvrir le portable pour le vérifier, je pense qu'il n'y a aucune carte bluetooth d'installée sur l'ordinateur. Un lspci semble le confirmer.

Clavier typographique

La plupart des touches fonctionnent correctement, seulement j'ai toujours eu pour habitude d'insérer des points de suspension par la combinaison de touche Shift+AltGr+,. Il suffit d'utiliser l'agencement France Autre au lieu de France pour récupérer ces raccourcis.

Touches programmables

Il y a une touche Backup Manager, fonctionnalité Acer réservée à Windows et donc totalement inutile ici, ainsi qu'une touche programmable. Les combinaisons de touches Fn+F2 et Fn+F3 ne fonctionnent pas. On peut aussi ajouter la touche Bluetooth qui, s'il n'y a pas de carte sous le capot, est sans intérêt.

Pour paramétrer les touches Fn+F2, Fn+F3 et la touche Programmable, il suffit de les mapper dans les raccourcis clavier de l'environnement de travail (sous Gnome, Préférences --> Raccourcis clavier).

Après un essai de paramétrage, notamment avec xev, il semble que les deux dernières touches doivent se configurer avec keytouch-editor puis l'agencement ainsi créé doit être importé dans keytouch. Voici l'agencement :


<keyboard>

  <file-info>

    <syntax-version>1.2</syntax-version>

    <last-change format="%d-%m-%Y">15-08-2010</last-change>

    <author></author>

  </file-info>

  <keyboard-info>

    <keyboard-name>

      <manufacturer>Acer</manufacturer>

      <model>Aspire 5740G</model>

    </keyboard-name>

  </keyboard-info>

  <key-list>

    <key>

      <name>Backup-Manager</name>

      <scancode>226</scancode>

      <keycode>FRONT</keycode>

      <default-action>mintbackup</default-action>

    </key>

    <key>

      <name>Bluetooth</name>

      <scancode>212</scancode>

      <keycode>COFFEE</keycode>

      <default-action>gedit</default-action>

    </key>

  </key-list>

</keyboard>

Une fois keytouch configuré, les touches sont utilisables dans les raccourcis clavier de Gnome. À noter qu'une fois programmée, la touche Bluetooth aura la même fonction que la touche Fn+F3.

Voici enfin l'exemple de mon mappage actuel :

Fn+F2 Ouvrir le Moniteur Système gnome-system-monitor
Programmable Ouvrir le lecteur CD eject
Bluetooth Éteindre l'écran COFFEE
Backup Manager Ouvrir le dossier Home FILE
Touchpad

Le touchpad est sensé être multipoint, c'est indiqué sur un autocollant publicitaire placé sur le pavé lui-même ! Or, après l'ajout de Option "SHMConfig" "true" dans le fichier /usr/lib/X11/xorg.conf.d/10-synaptics.conf tel qu'indiqué ici, puis redémarrage du serveur X, la commande synclient -m 50 me sort 1 finger quel que soit le nombre que j'en pose sur le pavé. Je suppose donc que le driver synaptics ne reconnait pas totalement mon pavé.

Logo Windows

J'ai réalisé deux planches d'autocollants avec les mascottes Gnu et Tux pour faire disparaître les différents logos de la marque à la fenêtre.

En résumé
Bluetooth Non résolu
Touchpad Non résolu
Clavier typographique OK
Touches programmables OK
Logo Windows OK
Total 3/5

Problèmes ponctuels

Bandes floues/baveuses à l'écran

Quelques bandes peuvent apparaître sur l'écran, rendant baveuse la police de caractère. Après quelques essais de réglages des optimisations de la police, la solution m'est venue : la résolution d'écran doit être configurée en 1366x768 (16:9) et non pas (16:10) soit le réglage 1366x768 (préférée) dans l'outil de configuration d'ATI.

Touches multimédia et VLC

VLC ne gère pas les touches multimédia, et les raccourcis globaux de ses préférences ne fonctionnent pas avec les combinaisons à base de Fn. Pour palier à ce problème, il suffit de remplacer les combinaisons de Fn avec Ctrl+Alt.

Touchpad non-reconnu après GDM

Il peut arriver que le touchpad reste bloqué après avoir appuyé sur la touche blocage du clavier, même après redémarrage. Pour résoudre ce problème, il suffit de taper :


gconftool --type bool --set /desktop/gnome/peripherals/touchpad/touchpad_enabled true
	
Haut de page