Monter un support usb automatiquement

comments

2014-03-20T22:30:00

Introduction

Lorsqu'on utilise un gestionnaire de fenêtre sans environnement de bureau, il y a des actions qu'on a pas1, comme par exemple des notifications quand on branche un support de type usb. Depuis quelques temps c'est une opération qui m'arrive de réaliser assez régulièrement pour diverse raison. J'en avais un peu marre de devoir gérer le montage à la main, il faut dire que c'est pas une action super amusante surtout lorsqu'on est pressé. Je suis donc parti à la recherche d'un outil gérant ça de manière automatique, j'ai demandé sur l'un des sites stackexchange et j'ai finalement trouvé mon bonheur grâce à z3bra que je remercie, le projet est ldm est il est disponible sur github.

Installation

Le projet utilise udev, il dépend donc de libudev-dev et libmount-dev. Pour l'installer sous Debian et dérivés il n'y a pas de paquet disponible, il faut donc passer par les sources:

sudo apt-get install libudev-dev libmount-dev
git clone https://github.com/LemonBoy/ldm.git
cd ldm
make
sudo make install

Tout simplement. J'ai aussi fais un petit script avec le module fab pour pouvoir déployer rapidement une nouvelle machine, il y a une commande pour installer ldm.

Usage

Ensuite l'usage est très simple, il y a une option pour le lancer en mode daemon si ce n'est pas déjà géré par le système via systemd par exemple:

export USERID=`id -u`
export GROUPID=`id -g`
sudo ldm -d -u $USERID -g $GROUPID

L'option -d permet de lancer la commande en mode daemon, l'option -u et -g permettent respectivement de spécifier l'uid et le gid à utiliser pour monter le support. Dans l'exemple ci-dessus on utilise la commande id pour récupérer les informations de l'utilisateur courant. Par défaut le support sera monté dans le répertoire racine du système /mnt qu'il est possible de changer avec l'option -p, et l'option -c permet d'indiquer le chemin vers un exécutable qui sera appelé à chaque fois qu'une clé sera monté.

Lancer la commande à l'ouverte de la session

Dans qtile pour lancer la commande au démarrage:

@hook.subscribe.startup
def startup():
    execute_once("automount")

Il faut avoir ajouté la fonction execute_once dans votre fichier de configuration.

Mettre les lignes ci-dessous dans /usr/local/bin/automount, par exemple:

export USERID=`id -u`
export GROUPID=`id -g`
sudo ldm -d -u $USERID -g $GROUPID

Puis rendre le script exécutable.

Conclusion

Une commande simple et légère qui fait bien son travail et pas plus.

Drapeau En Dépôt sur github


  1. En tous les cas pas de base ↩

Plus de souris avec urxvt

comments

2014-01-27T22:50:00

Introduction

Utilisant un tilling et depuis peu ayant recommencer à utiliser firefox avec l'extension pentadactyl, il est tout naturel de chercher à utiliser un peu moins la souris. Certains un peu mauvaise langue diront que c'est encore un meilleur moyen de perdre un peu plus de temps, mais je ne suis pas d'accord, c'est une habitude à prendre une fois prise le clavier reste ce qu'il y a de plus rapide et surtout de moins fatigant pour le poignet, car moins de mouvements. J'ai découvert trois scripts pour urxvt qui permettre de se séparer de la souris. Merci à Mo0O pour m'en avoir parlé.

Installation

Il y a un dépôt git avec les scripts, il suffit donc de cloner le dépôt puis de copier les fichiers dans /usr/lib/urxvt/perl/:

git clone https://github.com/muennich/urxvt-perls
cp clipboard keyboard-select url-select /usr/lib/urxvt/perl/

Une autre solution est de placer les fichiers dans un répertoire et d'ajouter une ligne dans son fichier de configuration Xdefaults pour lui indiquer ou chercher les scripts:

urxvt.perl-lib: /path/du/repertoire

Keyboard-select

Le premier script est keyboard-select, il permet d'utiliser le clavier pour copier et coller du texte de son terminal, ajouter les lignes dans votre Xdefaults:

urxvt*perl-ext-common:        default,keyboard-select
urxvt.keysym.Control-p:       perl:keyboard-select:activate

La première ligne permet d'activer le plugin. La deuxième permet d'indiquer que pour passer en mode copie il faut utiliser ctrl-p. Ensuite pour les déplacements c'est comme dans Vim, je vous laisse regarder la documentation pour avoir plus de détail.

Url-select

Le deuxième plugin est url-select, il est un remplaçant de l'extension par défault matcher, ça se passe toujours dans le même fichier, c'est Xdefaults:

urxvt*perl-ext-common:        default,url-select
urxvt.keysym.Control-u:       perl:url-select:select_next

Encore une fois on active le plugin, puis on indique que ctrl-u permet de se rendre sur le premier lier matché, puis la touche entré permet de l'ouvrir dans son navigateur. Encore une fois, je renvois vers la documentation pour plus de détail

Clipboard

Puis pour finir le dernier permet de gestion de la copie dans presse-papier et pouvoir ensuite coller le contenu:

urxvt*perl-ext-common:        default,clipboard
urxvt.keysym.S-C-V:           perl:clipboard:paste
urxvt.clipboard.autocopy:     true

Une fois n'est pas coutume on active le plugin. Une fois ceci fait shift-ctrl-v permet de paster, mais je ne l'utilise pas. L'option autocopy permet de mettre à jour automatiquement le presse-papier si il la selection primaire change.

Pour activer les trois plugins ajouter cette ligne dans votre Xdefaults:

urxvt*perl-ext-common: default,url-select,keyboard-select,tabbedex,clipboard

Plus les différentes lignes de configuration indiqué plus haut pour chaque plugin.

Conclusion

Ces trois plugins sont vraiment très bien puis il permettre surtout de se séparer de la souris, ce qui est fort agréable. Au début, ça peut être un peu pertubant, mais une fois à l'aise c'est vraiment génial.

Drapeau En Dépôt sur github

Contrôler le son depuis le clavier avec qtile.

comments

2014-01-19T23:45:00

Introduction

Pour rester sur le ton de qtile, un petit article assez rapide, il est pratique de pouvoir contrôler le son depuis son clavier.

Configuration

C'est encore une fois dans le fichier de configuration qtile qui se trouve dans le répertoire utilisateur .config/qtile/config.py qu'il faut se rendre et ajouter quelques lignes:

Key([], 'XF86AudioRaiseVolume',
    lazy.spawn('amixer -c 0 -q set Master 2dB+')),
Key([], 'XF86AudioLowerVolume',
    lazy.spawn('amixer -c 0 -q set Master 2dB-')),
Key([], 'XF86AudioMute',
    lazy.spawn('amixer -c 0 -q set Master toggle'))

Si le clavier possède des touches multimédia, il n'est pas utile d'indiquer une touche ou un couple de préfixe il est donc possible de laisser le premier paramètre vide, pour le deuxième paramètre on indique le nom de la touche, utiliser la commande xev pour vérifier. Pour finir on fait appel à la commande amixer l'option c permet d'indiquer la carte à utiliser, l'option q est pour ne pas afficher le résultat des modifications, set est le mixeur il faut indiquer en premier paramètre la sortie auquel appliquer l'opération.

Conclusion

Un petit article rapide qui permet d'indiquer comment gérer le son depuis le clavier avec qtile, ce qui est pratique.

Lancer des applications au lancement de qtile.

comments

2014-01-12T22:45:00

Introduction

Il y a moment que j'utilise qtile maintenant, un gestionnaire de fenêtres vraiment très bien et puissant. Je ferai un article de présentation sur qtile prochainement. Dans cet article, je souhaite présenter comment lancer une application au lancement du gestionnaire de fenêtres qtile. Il est possible d'utiliser un fichier de configuration xinitrc par exemple, mais il est à mes yeux plus judicieux d'utiliser ce qui est fourni en natif par le gestionnaire de fenêtres.

Configuration

Qtile est développé en Python, ce qui rend sa personnalisation très agréable. Pour pouvoir lancer des applications au lancement du gestionnaire de fenêtres, il faut d'abord ajouter deux fonctions au fichier de configuration qtile qui se trouve dans le répertoire utilisateur .config/qtile/config.py:

import subprocess
import re

def is_running(process):
    s = subprocess.Popen(['ps', 'axuw'], stdout=subprocess.PIPE)

    for x in s.stdout:
        if re.search(process, x):
            return True

    return False

def execute_once(process):
    if not is_running(process):
        return subprocess.Popen(process.split())

La première fonction utilise la command ps pour voir si l'application est déjà lancé, la deuxième lance l'application si elle ne tourne pas déjà. Ensuite, on va encore ajouter une fonction décoré, qtile fournit un décorateur startup qui est donc appelé au lancement de qtile:

from libqtile import hook

@hook.subscribe.startup
def startup():
    execute_once("nm-applet")
    execute_once("feh --bg-fill /home/hobbestigrou/vim-shortcuts.png")

Avec un gestionnaire de fenêtres comme qtile par exemple étant très minimaliste on peut utiliser feh pour définir un fond d'écran, il peut aussi être pratique de lancer un gestionnaire de connexion et pleins d'autres choses encore.

Conclusion

C'est très pratique de pouvoir lancer une application au lancement de qtile, il est très bien qu'il soit fourni un décorateur par qtile, de plus le fait que le gestionnaire soit développé en Python permet de très facilement le personnaliser.

Drapeau En Site officiel

Utilisation de supervisor sur un projet Perl avec perlbrew.

comments

2014-01-03T23:30:00

Introduction

Comme certains auront pu le constater, mon blog n'était pas stable ces derniers temps, une raison assez simple j'utilise un petit moteur écrit en Perl, et j'avais pas pris le temps de configurer un outil pour relancer de manière automatique le tout, en cas de coupure quelconque, mais il y a supervisor pour faire ça qui fonctionne très bien et qui est simple à configurer. Je n'avais pas spécialement ni la tête, ni l'envie d'écrire malheureusement, pour diverses raisons mais j'ai décidé de m'y remettre sérieusement, et d'avoir configurer supervisor m'a motivé, et quoi de mieux que de le présenter rapidement pour reprendre.

Installation

Pour debian et dérivée il existe un paquet:

sudo apt-get install supervisor

Pour les autres distributions il doit aussi avoir un paquet de disponible autrement il est possible de l'installer via pip.

Configuration

Supervisor utilise des fichiers ini pour sa configuration ce qui est assez simple, il y a des en-têtes avec le nom de l'application. Il est recommandé en général d'avoir un fichier de configuration par service. Je vous recommande aussi la lecture du blog de marmotte sur le sujet1. Il y a un certains nombre d'options disponible:

  • command qui permet d'indiquer la commande à exécuter par supervisor,
  • environment pour définir des variables d'environnement utile à l'execution du programme,
  • directory indiquer le répertoire duquel sera lancé la commande,
  • autostart un bolean pour indiquer si il faut lancer automatiquement le programme,
  • user pour spécifier quel utilisateur lance la commande

Pour finir un certain nombres d'options pour les logs.

Utilisation avec plackup et perlbrew

J'ai dis que je l'avais utilisé pour un projet Perl, j'utilise perlbrew. Pour utiliser la version que je souhaite avec perlbrew j'utilise en principe la commande use qui va finalement définir des variables d'environnements, voici ma configuration qui peut servir de base pour tous projets Perl:

[program:MahewinSimpleBlog]
command = /home/hobbestigrou/perl5/perlbrew/perls/perl-5.14.2/bin/perl /home/hobbestigrou/perl5/perlbrew/perls/perl-5.14.2/bin/plackup -E deployment -s Starman --workers=10 -p 4000 -a bin/app.pl -D
directory = /home/hobbestigrou/MahewinSimpleBlog
environment = PERL5LIB='/home/hobbestigrou/MahewinBlogEngine/lib',PERLBREW_ROOT='/home/hobbestigrou/perl5/perlbrew',PATH='/home/hobbestigrou/perl5/perlbrew/bin:/home/hobbestigrou/perl5/perlbrew/perls/perl-5.14.2/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games',MANPATH='/home/hobbestigrou/perl5/perlbrew/perls/perl-5.14.2/man:',PERLBREW_VERSION='0.43',PERLBREW_PERL='perl-5.14.2',PERLBREW_MANPATH='/home/hobbestigrou/perl5/perlbrew/perls/perl-5.14.2/man',PERLBREW_SKIP_INIT='1',PERLBREW_PATH='/home/hobbestigrou/perl5/perlbrew/bin:/home/hobbestigrou/perl5/perlbrew/perls/perl-5.14.2/bin',SHLVL='2'
user = hobbestigrou
stdout_file = /home/hobbestigrou/mahewinsimpleblog.log
autostart = true

Il suffit donc simplement d'utiliser l'option de configuration environment2 qui permet de définir des variables d'environnements, et d'appeler plackup avec son chemin complet et celui pareil pour l'interprète perl.

Conclusion

C'est un outil très pratique qui rend des services et permet de se soutraire du lancement manuel de processus et qui le redemarre de manière automatique si pour une raion ou une autre il est coupé. De plus maintenant, je vais pouvoir configurer simplement tous mes projets avec un daemon quelque soit le langage et utiliser supervisor.


  1. Un bon article sur supervisor http://blog.garamotte.net/posts/2013/09/13/fr-manage-daemons-with-supervisor.html ↩

  2. Le fonctionnement est similaire avec virtualenv il suffit de regarder les variable fixé par l'outil ↩