在 Ubuntu 13.10 中从 Nemo 打开远程终端位置

在 Ubuntu 13.10 中从 Nemo 打开远程终端位置

在 Nautilus 中,可以通过密码建立到远程服务器的 ssh 连接。然后,您可以将地址添加到书签并快速访问该地址。这在 Ubuntu 13.10 的 Nemo 中仍然有效。

但是,只需单击右键并使用“在终端中打开”选项,用户就可以打开一个终端,该终端将显示远程服务器的提示。因此,您可以立即开始在那里工作。

在 Ubuntu 13.10 中使用 Nemo 而不再使用 Nautilus 似乎不再起作用。我发现我可以使用一个脚本:

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

但我更希望恢复以前的行为。这可能吗?

答案1

您可以在 ~/.local/share/nemo/actions 中创建两个动作。

文件 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;

文件 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;

最后是 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 = ['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)

答案2

在写这些代码时,我的 Nemo 又出现了问题。迁移到 64 位版本的 Ubuntu 14.04 (Mate) 后,我发现 Python 脚本停止工作了。我发现 %F 拒绝再传递参数。因此我切换到 %U(仍然有效)并将脚本改编为 Bash(我不喜欢 Python,这可能是个人喜好问题):

#! /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 

该脚本本质上与 Python 脚本相同,但能让我更好地掌握我想要做的事情。

答案3

仅使用 bash,这对我在 Linux Mint 19 和 nemo 3.8.5 中有效:

远程终端1.动作:

[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;

远程终端2.动作:

[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(不要忘记使用 使其可执行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

相关内容