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
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
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.
local-openscript and place it somewhere in your
PATHon the remote machine. For example, run this from
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.
"xdg-open". Defaults to "open".
ALT_LOCALHOST: The domain name which will replace
127.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 calls
local-openinstead for URLs. This would make any program which uses
local-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
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
[web] browser = local-open [browser "local-open"] cmd = local-open
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:
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.