Asociar enlaces ssh://
En muchas distribuciones encontrar un enlace con la forma ssh://
no viene configurado para ser abierto. A esto se le conoce como handler , y es necesario realizar algunas modificaciones.
Por un lado hay que registrar la aplicación.
xdg-mime default ~/.local/share/applications/ssh.desktop x-scheme-handler/ssh
Cuidado, en ocasiones la anterior no completa nuestra configuración. Una vez tengamos nuestro ssh.desktop en el directorio especificado anteriormente, puede ser que necesitemos ejecutar un xdg-settings set default-url-scheme-handler ssh ssh.desktop
Y necesitamos tener el ficherossh.desktop
en la ruta ~/.local/share/applications/
. Su contenido debe tener las siguientes líneas.
[Desktop Entry]
Name=SSH Handler
Terminal=false
NoDisplay=true
Type=Application
Exec=/usr/local/bin/ssh-handler.sh %u
Icon=utilities-terminal
StartupNotify=false
MimeType=x-scheme-handler/ssh;
Y como un comando ssh
puede escribirse de varias formas, necesitamos contemplar la mayoría de ellas. Para ello tenemos el script que se indica en la línea Exec
del fichero anterior.
#!/usr/bin/env bash
parseURL(){
[ "$1" == "-i" ] && flg_cur=1 && shift 1
local s=${1##ssh://}
local a=${s%%@*}
[ "$a" == "$s" ] && a=''
local h=${s##*@}
local user=${a%%:*}
local pass=${a##*:}
[ "$pass" == "$a" ] && pass=''
local host=${h%%:*}
local port=${h##*:}
port=${port%%/}
[ "$port" == "$h" ] && port=''
decodeURIComponent(){
echo "$1" | sed -e 's/%\([0-9A-Fa-f][0-9A-Fa-f]\)/\\\x\1/g' | xargs -0 printf "%b";
}
pass=`decodeURIComponent "$pass"`
local cmd="$host"
[ -n "$user" ] && cmd="$user@$cmd"
[ -n "$port" ] && cmd="$cmd -p $port"
cmd="ssh $cmd"
[ -n "$pass" ] && cmd="sshpass -p '$pass' $cmd"
echo "url: $1"
echo "cmd: $cmd"
echo
[ -n "$flg_cur" ] && { eval "$cmd"; return; }
kitty $cmd
}
parseURL "$@"
Este script debe estar ubicado donde se indique en el fichero .desktop y ha de ser ejecutable.
A tener en cuenta: Es posible que gvfsd tenga asociado ssh
con sftp
porque utilizan el mismo puerto. En este caso debemos cambiar esta configuración, porque si no el enlace se abrirá con el navegador de archivos que tengamos instalado e intentará montar ese recurso remoto.
Esta configuración podemos cambiarla en el fichero /usr/share/gvfs/mounts/sftp.mount
. Y necesitamos comentar la línea SchemeAliases
=ssh.
sed -ire 's/^SchemeAliases=ssh/#\0/' /usr/share/gvfs/mounts/sftp.mount
Y por suspuesto reiniciar el servicio gvfsd para que este cambio tenga efecto sin reiniciar.
kill -HUP $(ps faxu | grep gvfsd$ | awk '{print $2}')