Qui n'a jamais songé à lancer automatiquement son client IRC ? Qui n'a jamais rêvé de lancer son client en nCurses automatiquement au démarrage de la machine, comme un simple service ? Il y a cependant une problèmatique de taille : Contrairement à un service en arrière-plan normal, le logiciel en nCurses produit un output (sur la sortie standard) que l'on doit pouvoir récupérer plus tard. De ce fait, il faut lancer le client dans une session détachée, avec l'aide d'un multiplexeur de terminal, comme Tmux par exemple.

Il y a un autre problème. Si ce n'est pas explicitement paramètré, le démon sera lancé sous l'utisateur root par défaut, mais il est hors de question de lancer notre client IRC en root. Heureusement, systemd a tout prévu pour changer l'utilisateur qui lancera le client. Au final, il suffit d'écrire un fichier, à peine plus long qu'un .desktop, pour réaliser ce qui est décrit plus haut. Une fois encore grace à la simplicité de systemd.

$ cat /lib/systemd/system/irssi.service

[Unit]
Description=Run IRSSI in a Tmux session for user casper
After=NetworkManager.service syslog.target auditd.service

[Service]
Type=forking
User=casper
Group=casper
ExecStart=/usr/bin/tmux new-session -d -s irc -n irssi irssi

[Install]
WantedBy=multi-user.target

Le nom d'utilisateur est à adapter.

Avec les outils systemd, on retrouve dans le service "irssi" un comportement absolument identique à celui d'un service en arrière-plan tout, comme le montre la sortie ci-après :

# systemctl status irssi
irssi.service - Run IRSSI in a Tmux session for user casper
 Loaded: loaded (/usr/lib/systemd/system/irssi.service; enabled)
 Active: inactive (dead) since Sun, 23 Dec 2012 22:51:33 +0100; 25s ago
Process: 23027 ExecStart=/usr/bin/tmux new-session -d -s irc -n irssi irssi (code=exited, status=0/SUCCESS)
Main PID: 23029 (code=exited, status=0/SUCCESS)
 CGroup: name=systemd:/system/irssi.service

# systemctl start irssi
# systemctl status irssi
irssi.service - Run IRSSI in a Tmux session for user casper
 Loaded: loaded (/usr/lib/systemd/system/irssi.service; enabled)
 Active: active (running) since Sun, 23 Dec 2012 22:53:32 +0100; 2min 37s ago
Process: 23939 ExecStart=/usr/bin/tmux new-session -d -s irc -n irssi irssi (code=exited, status=0/SUCCESS)
Main PID: 23941 (tmux)
 CGroup: name=systemd:/system/irssi.service
  23941 /usr/bin/tmux new-session -d -s irc -n irssi irssi
  23942 irssi

Sous l'utlisateur "casper", je vois bien la session Tmux détachée :

$ tmux list-session
irc: 1 windows (created Sun Dec 23 22:53:32 2012) [80x23]

Pour récupérer l'affichage d'irssi dans le terminal, il faut lancer la commande :

$ tmux attach -t irc

Voilà une combine indspensable pour ceux qui font tourner leur client IRC sur leurs serveurs.