如何更改 xdg-open 对 ssh://user@ip liniks 的操作

如何更改 xdg-open 对 ssh://user@ip liniks 的操作

xdg open 忽略了我的指令。我找到了几个关于如何打开 ssh://user@ip 链接的线程(这些在我们的监控软件中)。我运行了以下命令:

gconftool-2 -s /desktop/gnome/url-handlers/ssh/command '/home/dankney/bin/SSH.handler %s' --type String
gconftool-2 -s /desktop/gnome/url-handlers/ssh/enabled --type Boolean true
gconftool-2 -s /desktop/gnome/url-handlers/ssh/needs_terminal --type Boolean true

然而,当我尝试使用 xdg-open(就像 chrome 浏览器那样)时,它仍然尝试使用 sftp......

xdg-open ssh://[email protected]
gvfs-open: sftp://[email protected]/: error opening location: The specified location is not mounted

它似乎在注册表中设置正确

gconftool-2 -a /desktop/gnome/url-handlers/ssh
 command = /home/dankney/bin/SSH.handler %s
 needs_terminal = true
 enabled = true

哦-这是 ls -alFh 和 SSH.handler 的内容

ls -alFh /home/dankney/bin/SSH.handler 
-rwxrwxr-x 1 dankney dankney 133 Sep 18 21:16 /home/dankney/bin/SSH.handler*


cat /home/dankney/bin/SSH.handler*
#!/bin/bash
url=$1
protocol=${url//:*/}
machine=${url//*:\/\//}
machine=${machine%/}
/usr/bin/gnome-terminal -e "$protocol $machine"

是什么赋予了?

哦 - 顺便说一句 - 如果从命令行运行,shell 脚本确实有效......

答案1

对于任何其他后来者,如果有此问题的较新版本 - 此链接对我来说是完整的解决方案:https://lithostech.com/2014/04/get-ssh-protocol-links-working-in-ubuntuchromeunity/

基本上,在 shell 中执行以下操作来创建并重新分配 ssh 处理程序和 mime 类型:

xdg-mime default ssh.desktop x-scheme-handler/ssh
cat << EOF > ~/.local/share/applications/ssh.desktop
[Desktop Entry]
Version=1.0
Name=SSH Launcher
Exec=bash -c '(URL="%U" HOST="\${URL:6}"; ssh \$HOST); bash'
Terminal=true
Type=Application
Icon=utilities-terminal
EOF

答案2

我想改变链接xdg-open的作用ssh://,用 yakuake 替换 konsole 作为处理程序。这是我在 Kubuntu 15.10 (KDE Frameworks 5.15.0) 上所做的:

  1. 找出处理程序是什么:

    $ xdg-mime query default x-scheme-handler/ssh
    ktelnetservice5.desktop
    
  2. 找到磁盘上的处理程序:

    $ locate ktelnetservice5.desktop
    /usr/share/app-install/desktop/kio:ktelnetservice5.desktop
    /usr/share/applications/ktelnetservice5.desktop
    

    就我而言,我必须编辑/usr/share/applications/ktelnetservice5.desktop

  3. 编辑处理程序替换

    Exec=ktelnetservice5 %u
    

    Exec=/path/to/some/script.sh %u
    

该脚本如下所示:

#!/bin/bash
qdbus org.kde.yakuake /yakuake/window toggleWindowState; qdbus org.kde.yakuake /yakuake/sessions addSession && qdbus org.kde.yakuake /yakuake/sessions runCommand "ssh `echo $1 | cut -d'/' -f3`"

并被赋予执行权限:

chmod +x /path/to/some/script.sh

就是这样!

答案3

首先,您应该设置一个协议处理程序,如下所示:

xdg-mime default ssh.desktop x-scheme-handler/ssh

然后创建一个桌面条目文件并将其放在类似的某个地方/usr/share/applications(也许最好把它放在某个地方~/.config,虽然不确定在哪里)。

ssh.桌面

[Desktop Entry]
Terminal=false
Type=Application
Exec=/home/dankney/bin/SSH.handler %F

然后下次xdg-open调用时,它将使用 ssh.desktop 处理程序,该处理程序又将调用委托给您的 shell 脚本。

答案4

编写了一个脚本支持此 url 方案:

ssh://[user[:pass]@]host[:port]

xdg-打开-ssh:

使用gnome-terminalterminator打开 ssh url,
如果pass出现,则使用sshpass输入密码。
如果pass错误,则故障回复到用户输入密码。

https://github.com/yurenchen000/xdg-open-ssh

相关内容