web-dev-qa-db-ja.com

Ubuntu 13.10でNemoからリモートターミナルの場所を開く

Nautilusでは、パスフレーズを介してリモートサーバーへのssh接続を構築できました。その後、アドレスをブックマークして、本当に速くそこに行くことができます。これは、Ubuntu 13.10を使用したNemoでも引き続き機能します。

しかし、その後、右クリックして「ターミナルで開く」オプションを使用すると、ユーザーはリモートサーバーのプロンプトを表示するターミナルを開くことができます。そのため、すぐに作業を開始できます。

Ubuntu 13.10でNautilusではなくNemoを使用すると、これはもう機能しないようです。スクリプトを使用できることがわかりました。

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

しかし、私は古い振る舞いを取り戻したいです。それはどういうわけか可能ですか?

3
user262326

〜/ .local/share/nemo/actionsに2つのアクションを作成できます。

ファイル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 script 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)
1
Thimo Kraemer

これらの行を書いている間、私はNemoでさらに壊れました。 Ubuntu 14.04(Mate)の64ビットバージョンへの移行pythonスクリプトが動作を停止したことがわかりました。 (まだ機能しています)、スクリプトを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スクリプトと同じですが、やりたいことをよりよく把握できます。

1
Info

Bashのみを使用して、これがLinux Mint 19および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(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