Ouvrir un terminal distant dans Nemo

closeCet article a été publié il y a 3 ans 11 mois 16 jours, il est donc possible qu’il ne soit plus à jour. Les informations proposées sont donc peut-être expirées.

J’ai dû changer de machine tout récemment, et cela passe souvent par une remise en question de son environnement de travail. C’est à ce moment là qu’on se rend compte de tous ces petits « trucs » que l’on avait ajouté de ci de là pour optimiser son travail au quotidien.

Dans mon cas, je viens de passer d’une Ubuntu 14.04 + XFCE  à une Ubuntu 16.04 + Cinnamon. J’apprécie ce bureau je dois bien le dire. Mais là n’est pas le sujet de ce billet.

J’utilisais Nautilus avec XFCE. Sous Cinnamon, nous avons par défaut son clone dénommé Nemo. Je travaille souvent sur des machines virtuelles distantes, auxquelles j’accède en ssh via un VPN. J’utilise le gestionnaire de connexions Gigolo pour initialiser les connexions. L’authentification se fait par clé, ce qui me fournit une connexion « instantanée ».

Avec Nautilus, j’utilisais la fonction « Ouvrir dans un terminal » pour lancer un terminal ssh sur la machine virtuelle et exécuter des commandes. En passant sous Nemo, cette fonction existe, mais elle n’ouvre pas une session ssh distante, mais une session locale.

Il est heureusement possible d’ajouter des scripts et des actions dans Nemo. Mes recherches m’ont conduites à cette page qui indique la marche à suivre. Bien que indiqué pour Ubuntu 13, la solution proposée reste valide.

Il convient de placer dans le dossier .local/share/nemo/actions deux fichiers contenant, pour l’un la description du menu à ajouter et pour l’autre un script en Python se chargeant de l’appel du terminal.

Ajout du menu via le fichier remote_terminal.nemo_action

[Nemo Action]
Name=Ouvrir un terminal distant
Comment=Open current folder in remote terminal
Name[de]=Im entfernten Terminal öffnen
Comment[de]=Aktuellen Ordner im entfernten Terminal öffnen
Exec=<remote_terminal.py %F>
Icon-Name=terminal
Selection=none
Extensions=dir;
Dependencies=ssh;

Le script python remote_terminal.py

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

import sys
import subprocess

path = sys.argv[1]

if '/sftp:' in path:
 sftp = path.split('/sftp:', 1)[1]
 settings = {}
 options, sep, settings['path'] = sftp.partition('/')
 for opt in options.split(','):
 name, sep, value = opt.partition('=')
 settings[name] = value

cmd = ['terminator', '-e',
 'ssh %(user)s@%(host)s -t "cd /%(path)s && bash --login"' % settings]
else:
 cmd = ['terminator', '--working-directory', path]

subprocess.call(cmd)

J’ai juste changé le terminal appelé en remplaçant gnome-terminal par terminator que je préfère à ce dernier. Le résultat en vidéo.



Philippe Scoffoni

Je barbote dans la mare informatique depuis 30 ans (premier ordinateur à 16 ans, un ORIC ATMOS) et je travaille à mon compte au travers de ma société Open-DSI. J'accompagne les associations, TPE et PME dans leurs choix et dans la mise en oeuvre se solutions informatiques libres.