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.
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 withnmcli
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 commandsleep
or utilize the-w
switch to makenmcli
in 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 isnmcli '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
: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.
Solution which did it for me (found with the help of Elder Geek).
I kept autoconnect on for all networks I want to automatically connect to, but off for the hot-spot. I then put the following script (with the right permissions as described on this Wiki page) in the folder
/etc/NetworkManager/dispatcher.d
This works very well so far; automatic connection to the hotspot whenever the ethernet cable is plugged in or even when the computer boots or wakes with the ethernet cable plugged in. Automatic deconnection from hot-spot whenever ethernet cable is pulled out, followed by automatic connection to available WiFi networks.