web-dev-qa-db-fra.com

Ouvrir le terminal distant depuis Nemo dans Ubuntu 13.10

Dans Nautilus, il était possible de créer une connexion SSH vers un serveur distant via une phrase secrète. Ensuite, vous pouvez ajouter l'adresse à vos favoris et y aller très vite. Cela fonctionne toujours dans Nemo avec Ubuntu 13.10.

Mais ensuite, avec un clic droit et en utilisant l'option "Ouvrir dans un terminal", l'utilisateur pourrait ouvrir un terminal qui afficherait une invite du serveur distant. Donc, vous pouvez commencer à y travailler tout de suite.

Utiliser Nemo et non plus Nautilus dans Ubuntu 13.10, cela ne semble plus fonctionner. J'ai découvert que je pouvais utiliser un script:

#!/bin/sh
gnome-terminal --execute /usr/bin/ssh [email protected]

Mais je préférerais retrouver l'ancien comportement. Est-ce que c'est possible?

3
user262326

Vous pouvez créer deux actions dans ~/.local/share/nemo/actions.

Fichier remote_terminal1.nemo_action:

[Nemo Action]
Name=Open in remote terminal
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;

Fichier remote_terminal2.nemo_action:

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

Et enfin un script Python remote_terminal.py (doit être exécutable):

#!/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 = ['gnome-terminal', '-e',
        'ssh %(user)s@%(Host)s -t "cd /%(path)s && bash --login"' % settings]
else:
    cmd = ['gnome-terminal', '--working-directory', path]

subprocess.call(cmd)
1
Thimo Kraemer

En écrivant ces lignes, je me suis retrouvé avec Nemo. Migration vers la version 64 bits d'Ubuntu 14.04 (Mate), j'ai constaté que les scripts python ne fonctionnaient plus. J'ai trouvé que% F refusait de transmettre les paramètres. Je suis donc passé à% U (fonctionne toujours) et ai adapté les scripts à Bash (je ne suis pas un fan de Python, c'est peut-être un goût personnel):

#! /bin/bash


# $1 enthält den ersten Parameter

# Testweise Ausgabe aller übergebenen Parameter 
# echo $*
# exit

# der Regex schneidet "sftp://" ab und übergibt den Rest an $sftp
# sftp://root@debbie/var/databases -> root@debbie/var/databases
sftp=`echo $1 | sed 's#^[sftp://]*##'`
# echo $sftp

# Abschneiden des Domain
# root@debbie/var/databases -> root@debbie
domain=`echo $sftp | sed 's#\/.*##'`
# echo $domain

# Abschneiden des Pfades
# root@debbie/var/databases -> var/databases
path=`echo $sftp | sed 's#[^\/]*.##'`
# echo $path
# ssh='ssh '$domain' -t "cd /'$path' && bash --login"'
# echo $ssh

# Der übergebene Pfad startet vom Wurzelverzeichnis / 
gnome-terminal -e 'ssh '$domain' -t "cd /'$path' && bash --login"'

read exit 

Le script fait essentiellement la même chose que le script python mais me permet de mieux saisir les tâches que je souhaite effectuer.

1
Info

En utilisant seulement bash, voici ce qui a fonctionné pour moi dans Linux Mint 19 et nemo 3.8.5:

remote_terminal1.action:

[Nemo Action]
Name=Open in remote terminal
Comment=Open current folder in remote terminal
Exec=<remote_terminal.sh %U>
Icon-Name=terminal
Selection=none
Extensions=dir;
Dependencies=ssh;

remote_terminal2.action:

[Nemo Action]
Name=Open in remote terminal
Comment=Open this folder in remote terminal
Exec=<remote_terminal.sh %U>
Icon-Name=terminal
Selection=s
Extensions=dir;
Dependencies=ssh;

remote_terminal.sh (n'oubliez pas de le rendre exécutable avec chmod +x remote_terminal.sh):

#! /bin/bash

# Get Host name
domain=`echo $1 | grep -Po "(?<=Host=)[^,]*"`

if [ ${#domain} -eq 0 ]; then
    # Not an SSH directory, just open regular terminal
    gnome-terminal --working-directory="$1"
else
    # Get user name
    user=`echo $1 | grep -Po "(?<=user=)[^/]*"`

    # Get path
    path=`echo $1 | grep -Po "(?<=user="${user}").*"`
    if [ ${#path} -eq 0 ]; then
        path=/
    fi

    # Connect
    gnome-terminal -- ssh ${user}@${domain} -t "cd "${path}" && bash --login"
fi
0
Corentin Schreiber