Ubuntu – Set up autoconnect to hot-spot only when ethernet connection

ethernethot-spotnetwork-managernetworkingwireless

I currently switch between the following two set-ups on a daily basis:

1) Being connected to the internet via a WiFi network.

2) Having my (Ubuntu 16.04) laptop connected to the internet via a wired connection, then sharing this connection with my other devices through the built-in hot-spot functionality of Ubuntu.

At the moment, switching from 1 to 2 requires me to manually go through the "connect to hidden network" dialogue in the Network Manager; similarly switching from 2 to 1 requires me to manually disconnect from the hotspot and connect to the WiFi network. It's not a lot of work, but I do it often enough that I would like to have it be automated.

It is not as simple as enabling autoconnect for the hotspot, since then it overrides the autoconnect functionality of other networks instead of connecting me to a WiFi network when I am not connected via a wired connection, and I end up with a hot-spot but no internet. So I need a solution which:

  • connects me to the hot-spot whenever I am connected to the internet via a wired connection.
  • disconnects me from the hot-spot when there is no ethernet connection.
  • autoconnects me to one of the networks with autoconnect=true whenever they are available and there is no ethernet connection.

A full explanation on how to do this would be great, but a reference to a good (non-expert) manual for setting up these kinds of rules would also be very much appreciated.

Best Answer

It's my understanding that when you plug in the Ethernet cable that trumps the wifi connection and the wifi connection drops automatically. In similar fashion, disconnecting the Ethernet cable auto connects to your preferred wifi (provided of course that you have the box checked to auto connect to that Wifi network on the general tab of network manager. Tested on a default install of Ubuntu 16.04.3

So if I'm understanding you correctly you just want to automatically start the hotspot service on your laptop when the Ethernet cable is connected and disable the service when the Ethernet cable is disconnected.

This should be fairly simple to do with a bash script and nmcli 'nmcli' is a powerful networknig tool that allows you to bring connections up and down at will and obtain tons of relevant information.

To find out what connections you will be scripting for simply run nmcli -t monitor| grep primary when connected via wifi and plug in your Ethernet cable. The connections you are interested in bringing up and down with nmcli will be those surrounded by 's Example: 'Wired connection 1' the logic is that when 'Connection' is connected bring up the hotspot (you may find it necessary to use the command sleep or utilize the -w switch to make nmcliin your script wait for a specified number of seconds for a command to complete before issuing the next.

Bringing a connection down is as simple as nmcli 'connection name' down and bringing one up is nmcli 'connection name' up

Note: For full control via the script you may need to actually disable the automatically connect option at least for your wifi connection in Network manager as it will attempt to auto-connect whenever it's available and can interfere with what you are attempting to accomplish. Excerpt from man nmcli:

There may be multiple connections that apply
       to a device, but only one of them can be active on that device at any
       given time. The additional connections can be used to allow quick
       switching between different networks and configurations.

So once you've determined that your Ethernet is connected you can issue the commands to bring the wifi connection down Example: nmcli connection my-wifi down and then the hotspot connection up Example: nmcli connection my-hotspot up

For more on how to automatically run scripts based on network connection see this. For more detail about 'nmcli' check the man page. And here's info on how to create a hotspot.