Do you sometimes open webpages from the terminal, but work in a headless VM or one with some crappy X11 environment? Wish you could just open those webpages in your much nicer base machine browser instead? Then local-open is for you! (Yes, this scratches a very specific itch =P)
Simply put, when you provide a URL to local-open, it issues the appropriate open command on your base machine through SSH.
If the URL is specific to the current machine (contains localhost or 127.0.0.1), a domain name which is reachable from the base machine will be substituted, if possible. local-open is also smart enough to know when you're not in a SSH session, and will just open the URL on the current machine in those cases.
OSX and Linux is supported.
-
Download the
local-openscript and place it somewhere in yourPATHon the remote machine. For example, run this from~/bin/:curl -L -O http://github.com/suan/local-open/raw/master/local-open -
Set the desired config variables, either by
exporting them in your.bashrcor by setting them in a~/.localopenrcfile. These are the available options:- LOCAL_OPEN_PORT: Port for the SSH connection to the base machine, e.g.
1999. Defaults to 22 - LOCAL_OPEN_HOST: Host for the SSH connection to the base machine. Defaults to "localhost"
- LOCAL_OPEN_USER: Username for the SSH connection to the base machine. Defaults to the current SSH session's username.
- LOCAL_OPEN_CMD: The "open" command to use on the base machine, e.g.
"open"or"xdg-open". Defaults to "open". - ALT_LOCALHOST: The domain name which will replace
localhostor127.0.0.1in URLs. Defaults to the hostname of the current machine.
- LOCAL_OPEN_PORT: Port for the SSH connection to the base machine, e.g.
-
If your base machine is inaccessible from the remote one, you need to setup a reverse SSH tunnel. The below section has instructions.
-
Now, when you do
local-open <URL>, the URL will be opened on your base machine's browser! -
If you like, you could create an
xdg-openfunction in your.bashrcor equivalent which callslocal-openinstead for URLs. This would make any program which usesxdg-openautomatically uselocal-open. (Some people don't like overriding system commands like that so I've left that out)
If your base machine is inaccessible from the remote one, you need to establish a reverse SSH tunnel from the base machine to the remote one. I highly recommend using AutoSSH, which will monitor and keep your tunnel alive (available in all package managers and homebrew). You could set such a tunnel to run on startup. To open a reverse tunnel on the remote host's port 1999, with port 1998 as the "monitoring" port:
autossh -M 1998 -f -N -R 1999:localhost:22 user@remotehost
Without autossh:
ssh -f -N -R 1999:localhost:22 user@remotehost
To make local-open work when you use fugitive.vim commands such as :Gbrowse, ensure the following exists in your ~/.gitconfig:
[web]
browser = local-open
[browser "local-open"]
cmd = local-open
hub integration
To use local-open when you perform commands such as git browse, you need to set the $BROWSER environment variable. Put this in your ~/.bashrc or equivalent:
export BROWSER="local-open"Please goto the project page at http://github.com/suan/local-open to report bugs, request features, or if you want to browse the code.