Trucs libres

CV Diaspora
spacer

samedi 8 septembre 2012

Écouter les événements souris sous Linux en mode texte

Par dooblem le samedi 8 septembre 2012, 23h59

  • Linux
  • MPD
  • Raspberry Pi

Un petit script pour écouter les événements souris avec la commande mev utilisant gpm (General Purpose Mouse).

Utilisé sur mon Raspberry Pi pour lancer des commandes MPD (Music Player Daemon), pour utilisé la souris comme télécommande.

Je n’ai pas encore trouvé comment isolé les événements de la molette souris, pour pouvoir régler le volume. Quelqu’un a une idée ?

Sous Archlinux, vous pouvez ajouter la commande suivante dans /etc/rc.local pour le lancer au boot :

nohup /usr/local/bin/mpd_mouse.sh > /tmp/mpd_mouse.log 2>&1 &
#!/bin/sh
# This script listen to mouse events with the mev command using gpm.
# Can be used for example on the Raspberry Pi to run mpd commands, to use a mouse as a remote control.
# You can start it as a daemon with:
# nohup /usr/local/bin/mpd_mouse.sh > /tmp/mpd_mouse.log 2>&1 &

# start gpm if not already started
gpm -m /dev/input/mice -t imps2

# unset TERM variable, otherwise mev refuses to start when detecting xterm
unset TERM

echo "Listening to mouse events..."

# we use script to fake a tty for mev, otherwise it exits (note: mev logs errors in syslog)
script -qc "mev -E" /dev/null </dev/null | grep --line-buffered -v "mouse-movement" | while read LINE
do
        echo
        echo "$LINE"

        EVENT=$(echo "$LINE" | cut -d' ' -f1 | cut -d'(' -f2)

        if [ "$EVENT" = "down-mouse-1" ]
        then
                echo mpc stop
                mpc stop
        elif [ "$EVENT" = "down-mouse-2" ]
        then
                echo mpc toggle
                mpc toggle
        elif [ "$EVENT" = "down-mouse-3" ]
        then
                echo mpc next
                mpc next
        else
                echo "nothing"
        fi

done

aucun commentaire

ssh-agent: ssh-add automatique à la demande

Par dooblem le samedi 8 septembre 2012, 23h40

  • SSH

Plusieurs environnements de bureau (Gnome, Kde) lancent automatiquement un agent SSH au démarrage. Cependant, il faut penser à lancer la commande ssh-add avant de se connecter à un serveur.

En attendant que OpenSSH support le ssh-add automatique, vous pouvez ajouter ceci à votre .bashrc :

ssh-add -l >/dev/null || alias ssh='ssh-add -l >/dev/null || ssh-add && unalias ssh; ssh'

L’alias est créé uniquement si l’identity n’est pas encore ajoutée, et l’alias s’autodétruit une fois lancé.

Une fois l’identité ajoutée, la commande SSH normale est utilisée.

superuser.com/questions/325662/how-to-make-ssh-agent-automatically-add-the-key-on-demand/471640#471640

aucun commentaire

vendredi 11 mai 2012

Testeur de ports en sortie

Par dooblem le vendredi 11 mai 2012, 13h22

  • network

Le serveur qui héberge ce blog répond sur tous les ports TCP (ipv4) de la plage 1 à 65535.

Voir : portquiz.positon.org

Les URLs suivantes devraient aussi fonctionner si vous n’êtes pas filtrés en sortie :

  • portquiz.positon.org:443
  • portquiz.positon.org:8080
  • portquiz.positon.org:8

Vous permet de tester quels ports TCP sont filtrés par votre réseau local.

Exemple en ligne de commande avec netcat :

$ nc -v portquiz.positon.org 1
electron.positon.org [178.33.250.62] 1 (tcpmux) open
$ nc -v portquiz.positon.org 65535
electron.positon.org [178.33.250.62] 65535 (?) open

aucun commentaire

dimanche 29 avril 2012

La crise des pixels : régression des résolutions

Par dooblem le dimanche 29 avril 2012, 15h53

Je cherche un nouveau laptop. Mon vieux Thinkpad T42p commence à se faire vieux. Je cherche donc un laptop avec un bon écran...

Sauf que... impossible de trouver sur le marché actuel un laptop ayant une résolution équivalente à mon T42p qui est sorti il y a plus de 8 ans !! Quand je parle de résolution, je parle de la densité de pixel en points par pouces (PPI). Ma résolution de 1400x1050 pour 14.1 pouces, c’est top ! ça donne une densité de 124 PPI.

De nos jours, tous les laptops ont maintenant une résolution unique de 1366x768. Le dernier thinkpad X1 de lenovo avec ses 13.3 pouces donne 118 PPI.

C’est inadmissible ! Je veux mes pixels !

Apparement je ne suis pas le seul dans ce cas...

  • 10rem.net/blog/2010/04/22/rant-hdtv-has-ruined-the-lcd-display-market-or-i-want-my-pixels-and-dpi-now
  • boards.straightdope.com/sdmb/showthread.php?t=421095
  • www.tabletpcbuzz.com/showthread.php?1624-Pixel-Density-Hostage-Crisis!&s=32e284cd59d44346c32f2471636389f2
  • www.tomshardware.co.uk/forum/59742-29-higher-pixel-pitch

C’est triste. Peux-être le salut sera-t-il dans nos écrans de téléphones portables qui ont de bien meilleures résolutions...

Autres liens utiles :

  • en.wikipedia.org/wiki/Pixel_density
  • Calculateur de PPI

3 commentaires

lundi 16 avril 2012

Comparaison / Différence entre deux images

Par dooblem le lundi 16 avril 2012, 14h00

  • bash
  • diff
  • ImageMagick

Après une longue recherche sur le Net, voici comment utiliser ImageMagick pour comparer deux image (diff), afin de déterminer si les images sont très proches, ou si l’une des images est une version redimensionnée de l’autre.

convert image1 image2 -resize '400x300!' MIFF:- | compare -metric AE -fuzz '10%' - null:

La commande convert prend 2 images, les redimensionne en une taille plus petite identique, puis les envoie dans un pipe à la commande compare qui compte le nombre de pixels différents.

La commande affiche le nombre de pixel différents. Si c’est 0 les images sont similaires.

2 paramètres peuvent augmenter la tolérance d’images similaires :

  • La taille des vignettes à comparer : plus la taille est petite, plus on élimine des détails. Bonne base : 1/4 de l’image la plus petite.
  • Le paramètre -fuzz : il s’agit de l’écart de couleur toléré. Plus on augmente ce paramètre, plus on tolère des couleurs différentes. En dessous de 2%, la différence de couleurs est quasiment imperceptible à l’œil nu.

Notes :

  • Il est préférable de conserver les mêmes proportions que les images originales.
  • Il faut un point d’exclamation pour forcer le redimensionnement sans tenir compte des proportions, car dans certains cas les deux vignettes n’ont pas une taille strictement identique, ce qui fait échouer la commande compare.

J’ai aussi fait un petit script qui redimensionne à 1/4 de la petite image et affiche le pourcentage de différences : imdiff

./imdiff /tmp/bad.jpg ../Public/images/bad.jpg
pixel difference: 2.927%
NOK

Liens :

  • www.imagemagick.org/script/compare.php
  • www.imagemagick.org/Usage/compare/

2 commentaires

samedi 25 février 2012

Android HTC Dream AZERTY keyboard

Par dooblem le samedi 25 février 2012, 19h28

  • Android
  • CyanogenMod

Small contribution to CyanogenMod wiki

Physical keyboard is changed to QWERTY after CyanogenMod 6 flash. if your HTC Dream has an AZERTY keyboard:

  • Download www.mon-cobaye.net/vrac/modif.zip (see SPF forum post)
  • Copy trout-keypad-v3.kl and azerty.kcm.bin to your sdcard
  • Then run the commands:
adb remount
adb shell
cat /sdcard/trout-keypad-v3.kl > /system/usr/keylayout/trout-keypad-v3.kl
cat /sdcard/azerty.kcm.bin > /system/usr/keychars/trout-keypad-v3.kcm.bin
  • Then reboot your phone

Some doc: source.android.com/tech/input/key-layout-files.html

aucun commentaire

lundi 30 janvier 2012

Suppression DRM Mobipocket (fichier .prc)

Par dooblem le lundi 30 janvier 2012, 01h11

  • bookeen
  • DRM
  • ebook

Le manuel d’utilisation de mon Bookeen Cybook Gen 3 est protégé par DRM ! Quelle calomnie !

Télécharger la dernière version de DRM Tools Archive sur stream-recorder.com/forum/download-drm-tools-archive-t7955p3.html

Extraire l’archive puis :

tools_v4.7/Mobi_Additional_Tools$ python MobiDeDRM_032.py /tmp/XXXXX.prc /tmp/decrypted.prc

Et voila vous pouvez maintenant ouvrir le fichier à l’aide de fbreader

Je ne suis pas sûr que ça fonctionne avec tous les fichiers PRC. Il faut peut être préciser le PID pour certains.

aucun commentaire

dimanche 13 novembre 2011

Script d'import de fichier CSV dans MySQL

Par dooblem le dimanche 13 novembre 2011, 21h32

  • bash
  • csv
  • MySQL

Voila le petit script sh que j’ai fait pour faire ça. Il existe la commande MySQL LOAD DATA INFILE, mais cette commande ne crée pas la structure de la table.

#!/bin/sh

MYSQL_ARGS="--defaults-file=/etc/mysql/debian.cnf"
DB="mbctest"
DELIM=";"

CSV="$1"
TABLE="$2"

[ "$CSV" = "" -o "$TABLE" = "" ] && echo "Syntax: $0 csvfile tablename" && exit 1

FIELDS=$(head -1 "$CSV" | sed -e 's/'$DELIM'/` varchar(255),\n`/g' -e 's/\r//g')
FIELDS='`'"$FIELDS"'` varchar(255)'

#echo "$FIELDS" && exit

mysql $MYSQL_ARGS $DB -e "
DROP TABLE IF EXISTS $TABLE;
CREATE TABLE $TABLE ($FIELDS);

LOAD DATA INFILE '$(pwd)/$CSV' INTO TABLE $TABLE
FIELDS TERMINATED BY '$DELIM'
IGNORE 1 LINES
;
"

dev.mysql.com/doc/refman/5.1/en/load-data.html

(Voir le commentaire "Posted by John Swapceinski on September 5 2011 5:33am")

aucun commentaire

mardi 14 juin 2011

Function PHP escapeshellarg, UTF8 et locales

Par dooblem le mardi 14 juin 2011, 23h09

  • locales
  • PHP
  • UTF8

La fonction PHP escapeshellarg dépend de votre locale courante. Je pense que c’est mal, mais les développeurs de PHP on fait ce choix. Si comme moi votre locale par défaut est ’C’, vous perdez vos caractères UTF8.

Ils suggèrent d’utiliser quelque chose comme setlocale(LC_CTYPE, "en_US.UTF-8"). Ça ne fonctionne pas si la locale en_US.utf8 n’est pas installée sur votre système. Bien sûr vous avez peut-être fr_FR.utf8, ou de_DE.utf8, mais vous aller devoir toutes les essayer jusqu’à trouver une locale utf8 qui correspond. Et s’il n’y en a pas vous êtes foutus. C’est mauvais aussi si vous voulez du code qui marche partout.

Utilisez simplement :

$escapedArg = "'".str_replace("'", "'\\''", $arg)."'";

Ça fait la même chose que la fonction escapeshellarg : remplacer chainel'hyperlongue par

'chainel'\''hyperlongue'

comme décrit dans le manuel de escapeshellarg (et j’ai aussi jeté un œil au code source de PHP pour être sûr).

Voir aussi :

  • www.php.net/escapeshellarg
  • bugs.php.net/bug.php?id=44945
  • bugs.php.net/bug.php?id=44564

aucun commentaire

dimanche 13 mars 2011

Un script mysqldump très simple pour sauvegarder vos bases de données

Par dooblem le dimanche 13 mars 2011, 21h42

  • Debian
  • MySQL
  • shell script

Voici les quelques lignes que j’utilise pour sauvegarder mes bases de données MySQL sur mon serveur Debian :

#!/bin/sh
# This will dump all your databases

DATE=$(date +%Y%m%d%H%M)

for DB in $(echo "show databases" | mysql --defaults-file=/etc/mysql/debian.cnf -N)
do
        mysqldump --defaults-file=/etc/mysql/debian.cnf $DB > /backup/mysql/${DB}_${DATE}.sql

        gzip /backup/mysql/${DB}_${DATE}.sql
done

# purge old dumps
find /backup/mysql/ -name "*.sql*" -mtime +8 -exec rm -vf {} \;

Vous pouvez le lancer via un cron :

11 1 * * * /usr/local/bin/mysqldump.sh > /tmp/mysqldump.log

De cette manière, toute erreur affichée par le script sera envoyée par mail à l’utilisateur root (adresse configurée dans /etc/aliases).

Sous une autre distribution que Debian, s’il n’existe pas un fichier de mot de passe équivalent dans /etc/mysql/, vous devrez en créer un.

6 commentaires

jeudi 13 janvier 2011

positon.42 et dnsmasq comme proxy DNS pour résoudre les domaines en .42

Par dooblem le jeudi 13 janvier 2011, 23h32

  • 42registry
  • dnsmasq

J’ai récemment fait la demande et obtenu mon domaine en .42 !

positon.42

Les .42 ne sont pas (encore) officiels (c’est à dire agréés par l’ICANN et servi par les serveurs DNS racine).

Pour résoudre les domaines en .42, vous devez interroger un serveur DNS qui connait les .42.

Je reprend dans mon billet ma modeste contribution au wiki de 42registry.org, qui explique une manière de configurer cela sous Ubuntu :

---

The following allows you to use Geeknode DNS only for .42 domains while keeping your regular DNS provider for other domains.

Install dnsmasq :

aptitude install dnsmasq

Edit /etc/dnsmasq.conf and add the line :

server=/42/81.93.248.69

Restart dnsmasq :

sudo /etc/init.d/dnsmasq restart

Edit /etc/dhcp3/dhclient.conf, then uncomment or add the line :

prepend domain-name-servers 127.0.0.1;

Now disconnect and reconnect to you local network, to refresh the /etc/resolv.conf file, then test it !

---

Liens :

  • https://www.42registry.org/
  • wiki.42registry.org/
  • wiki.42registry.org/page/Resolve#Ubuntu_and_Dnsmasq

2 commentaires

mercredi 29 décembre 2010

Restriction de commande Rsync par SSH

Par dooblem le mercredi 29 décembre 2010, 18h36

  • rsync
  • sauvegarde
  • SSH

Vous disposez de deux systèmes et vous voulez mettre en place une sauvegarde sécurisée par rsync + SSH d’un système sur l’autre.

De manière très simple, vous pouvez utiliser la commande :

backup.example.com# rsync -avz --numeric-ids --delete root@myserver.example.com:/path/ /backup/myserver/

Pour faire la sauvegarde, vous devez être root sur le serveur, car certains fichiers ne sont lisibles que par root.

Problème : vous allez autoriser backup.example.com à faire n’importe quoi sur myserver.example.com, alors qu’un simple accès en lecture seule sur un dossier suffit.

Pour résoudre ce problème, il suffit d’utiliser la directive command="" dans le fichier authorized_keys pour filtrer la commande lancée.

Pour trouver cette commande, on lance rsync en ajoutant l’option -e'ssh -v' :

rsync -avz -e'ssh -v' --numeric-ids --delete root@myserver.example.com:/path/ /backup/myserver/ 2>&1 | grep "Sending command"

On obtient un résultat du genre :

debug1: Sending command: rsync --server --sender -vlogDtprze.iLsf --numeric-ids . /path/

Maintenant, il suffit d’ajouter la commande avant la clé dans le fichier /root/.ssh/authorized_keys :

command="rsync --server --sender -vlogDtprze.iLsf --numeric-ids . /path/" ssh-rsa AAAAB3NzaC1in2EAAAABIwAAABio......

Et pour encore plus de sécurité, on pourra ajouter un filtre par IP, et autres options :

from="backup.example.com",command="rsync --server --sender -vlogDtprze.iLsf --numeric-ids . /path/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAAB3NzaC1in2EAAAABIwAAABio......

Maintenant, vous pouvez essayer d’ouvrir un shell ssh, ou de lancer d’autres commandes rsync non autorisées...

Notes :

  • Attention, si vous changez les options de la commande rsync, à ne pas oublier de modifier aussi le fichier authorized_keys.
  • Plus besoin de chroot compliqué, vous pouvez oublier mon précédent article : /post/SFTP-chroot-rsync

Voir aussi :

  • man ssh #/AUTHORIZED_KEYS FILE FORMAT
  • man rsync
  • view /usr/share/doc/rsync/scripts/rrsync.gz (restricted rsync, vous permet de gérer précisément les options autorisées)

aucun commentaire

dimanche 19 décembre 2010

Configuration proxy I2P via un fichier PAC

Par dooblem le dimanche 19 décembre 2010, 23h16

  • Firefox
  • Hadopi
  • I2P

En ces temps d’Hadopi, je viens de tester le réseau I2P, qui fonctionne plutôt bien.

L’installation est très facile. Il suffit de télécharger le fichier .exe et de le lancer avec la commande java -jar comme indiqué (ça fonctionne sous Linux, oui oui).

Maintenant, si vous souhaitez accéder aux sites en .i2p, comme par exemple forum.i2p, vous devez configurer votre navigateur pour utiliser le proxy : localhost:4444

Si vous ne souhaitez pas utiliser le proxy pour vous connecter aux sites normaux non i2p, vous pouvez utiliser l’extension Firefox FoxyProxy.

Vous pouvez aussi utiliser directement un fichier PAC (Proxy Auto-Config) :

function FindProxyForURL(url, host) {
    if (dnsDomainIs(host, ".i2p")) {
        return "PROXY localhost:4444";
    } else {
        return "DIRECT";
    }
}

Ensuite, vous configurez Firefox, ou les préférences proxy de Gnome pour utiliser le fichier file:///chemin/vers/proxy.pac comme configuration.

Attention cependant : avec cette méthode, un eepsite (un site .i2p) mal intentionné peu arriver à détecter votre vraie adresse IP.

Liens :

  • www.i2p2.de/ Le site de I2P
  • forum.i2p/viewtopic.php?p=30030
  • forum.i2p2.de/viewtopic.php?p=30030

aucun commentaire

mardi 30 novembre 2010

Clementine : un bon lecteur de musique

Par dooblem le mardi 30 novembre 2010, 21h11

  • Amarok
  • Clementine
  • Debian
  • musique
  • Ubuntu

J’ai découvert Clementine il y a quelques temps déjà.

Il n’existe pas de paquet ni sous Ubuntu, ni sous Debian, mais le site officiel fournit un paquet .deb pour votre version d’Ubuntu préférée. Il existe même en version Mac OS X et Windows...

Un petit clique sur le fichier .deb correspondant à votre distrib Ubuntu devrait suffire pour l’installer.

J’ai testé des tonnes de lecteurs (Amarok, Rythmbox, le vieux XMMS, Exaile, Listen, Totem...).

Clementine est un dérivé d’Amarok, très simplifié, et s’intègre très bien dans Gnome grâce aux librairies Qt4.

Bref, je suis heureux d’avoir découvert ce logiciel, que je vous recommande.

4 commentaires

mardi 9 novembre 2010

Routeur Exim : filtre destinataire

Par dooblem le mardi 9 novembre 2010, 23h51

  • courriel
  • Debian
  • Exim
  • Spam

Dans un précédent billet, j’expliquais comment mettre en place un "mangeur de courriel" avec Exim, de manière à se créer des adresses multiples qui redirigent toutes vers la même destination :

catchall_pub:
  driver = redirect
  domains = pub.mondomaine.com
  data = utilisateur@mondomaine.com

Ensuite, j’expliquais que sur l’adresse destination, on pouvait mettre en place un filtre Sieve ou Exim via un fichier .forward.

On peut vouloir mettre en place le filtre directement dans Exim, par soucis de centralisation de configuration, ou tout simplement si la boîte destination ne supporte pas les filtres.

Il suffit d’ajouter l’option local_parts :

catchall_pub:
  driver = redirect
  domains = pub.mondomaine.com
  local_parts = !/etc/exim4/pub.mondomaine.com.blacklist
  data = utilisateur@mondomaine.com

Dans /etc/exim4/pub.mondomaine.com.blacklist, on place les adresses rejetées, une par ligne :

toto1
titi2

Ainsi, les adresses toto1@pub.mondomaine.com et titi2@pub.mondomaine.com sont désormais rejetées.

Doc Exim4 :

  • The redirect router
  • Router preconditions
  • File names in lists

2 commentaires

samedi 30 octobre 2010

Précharger un contenu web avec la balise link prefetch, ou du javascript

Par dooblem le samedi 30 octobre 2010, 16h50

  • Bizou
  • Chromium
  • Firefox
  • HTTP
  • Javascript
  • PHP

Pour la gallerie d’images php Bizou, j’ai cherché différentes manière de précharger l’image suivante pour le mode "visualisation" (exemple).

Sous Firefox, c’est très simple. Il suffit d’utiliser la balise suivante pour que le navigateur précharge les contenus indiqués. Les contenus sont préchargés en arrière-plan une fois que la page courante est chargée intégralement.

<link rel="prefetch" href="/images/nextimage.jpg" />

Sauf que pour le moment seul Firefox supporte cette fonctionnalité. Note : un ticket est ouvert sur le sujet pour le projet Chromium.

Pour les autres navigateurs que Firefox, il faut utiliser du Javascript déclenché à l’événement window.onload :

<script type="text/javascript">
window.onload = function() {
    // pour les images
    var im = new Image();
    im.src = '/images/nextimage.jpg';
    // et pour les autres contenus
    var req = new XMLHttpRequest();
    req.open('GET', 'nextpage.php', false);
    req.send(null);
};
</script>

Attention aux en-têtes HTTP de cache envoyés par le serveur vers le navigateur. Pour un préchargement efficace de page PHP, il faudra que votre script envoie un en-tête Expires.

header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + 3600));

Enfin, pour une détection simple du navigateur depuis le script PHP :

<?php if (strpos($_SERVER['HTTP_USER_AGENT'], 'Firefox') !== false) { ?>
<link rel="prefetch" href="nextpage.php" />
 
<?php } else { ?>
<script type="text/javascript">
window.onload = function() {
    var req = new XMLHttpRequest();
    req.open('GET', 'nextpage.php', false);
    req.send(null);
};
</script>
<?php } ?>

Liens :

  • https://developer.mozilla.org/en/Link_prefetching_FAQ
  • www.4thkingdom.com/public/computers/789073-web-site-speed-prefetching-images-css/view-post.html (en jQuery)
gipoco.com is neither affiliated with the authors of this page nor responsible for its contents. This is a safe-cache copy of the original web site.