How to change what xdg-open does with ssh://user@ip liniks
xdg open has ignored my directives. I have found several threads regarding how to open ssh://user@ip links (these are in our monitoring software). Я выполнил следующие команды:
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://root@1.2.3.4
gvfs-open: sftp://root@1.2.3.4/: 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"
что дает?
Ох, кстати, скрипт оболочки действительно работает, если запускается из командной строки...
3 ответа
Для других опоздавших, с более поздними версиями этой проблемы - эта ссылка была для меня полным решением: https://lithostech.com/2014/04/get-ssh-protocol-links-working-in-ubuntuchromeunity/
В основном, выполните следующие действия в оболочке, чтобы создать и переназначить обработчик 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
Я хотел изменить то, что xdg-open
делает с ssh://
ссылки, чтобы заменить консоль с якуаке в качестве обработчика. И вот что я сделал на своем Kubuntu 15.10 (KDE Frameworks 5.15.0):
выяснил, что такое обработчик:
$ xdg-mime query default x-scheme-handler/ssh ktelnetservice5.desktop
находится обработчик на диске:
$ locate ktelnetservice5.desktop /usr/share/app-install/desktop/kio:ktelnetservice5.desktop /usr/share/applications/ktelnetservice5.desktop
в моем случае мне пришлось редактировать
/usr/share/applications/ktelnetservice5.desktop
отредактировал замену обработчика
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
И это все!
Сначала вы должны настроить обработчик протокола, например так:
xdg-mime default ssh.desktop x-scheme-handler/ssh
Затем создайте файл записи рабочего стола и поместите его где-нибудь /usr/share/applications
(возможно, было бы лучше поместить его где-нибудь в ~/.config
правда не знаю где).
ssh.desktop:
[Desktop Entry]
Terminal=false
Type=Application
Exec=/home/dankney/bin/SSH.handler %F
Тогда в следующий раз xdg-open
называется, он будет использовать обработчик ssh.desktop, который, в свою очередь, будет делегировать вызов вашему сценарию оболочки.
Написал скрипт поддержки этой схемы URL:
ssh://[user[:pass]@]host[:port]
XDG-открытый SSH:
использование gnome-terminal
или же terminator
откройте ссылку ssh,
если pass
происходить, использовать sshpass
введите пароль.
если pass
ошибка возврата к вводимому пользователем паролю.