Ouvrir un terminal distant dans Nemo

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.




Réagir à cet article

Article original écrit par Philippe Scoffoni le 19/03/2017. | Lien direct vers cet article

Cette création est mise à disposition sous un contrat Creative Commons BY à l'exception des images qui l'illustrent (celles-ci demeurent placées sous leur mention légale d'origine).

.
Vus : 154
Publié par Philippe Scoffoni : 540