221 lines
6.7 KiB
Markdown
221 lines
6.7 KiB
Markdown
|
# Networks
|
|||
|
This file covers wifi and bluetooth connections on linux
|
|||
|
|
|||
|
Required packages for the guide:
|
|||
|
- systemd
|
|||
|
- NetworkManager
|
|||
|
- `bluetoothctl`
|
|||
|
|
|||
|
Optional GUI tools to make this easier:
|
|||
|
- `pacman -S nm-connection-editor`
|
|||
|
- `pacman -S blueberry`
|
|||
|
|
|||
|
# Basic networks
|
|||
|
For Archlinux, choose between NetworkManager and netctl for your networking
|
|||
|
needs. NetworkManager comes from the GNOME project and is fully feature packed
|
|||
|
from the getgo. Netctl is a set of light shell scripts that rely on external
|
|||
|
packages for networking, so a bit harder to install
|
|||
|
|
|||
|
Both can be checked with systemd
|
|||
|
```bash
|
|||
|
systemctl status netctl.service
|
|||
|
systemctl status NetworkManager.service
|
|||
|
```
|
|||
|
|
|||
|
**Make sure only one is running and enabled**. Using both at the same time will
|
|||
|
result in system slowdowns, especially at boot times
|
|||
|
|
|||
|
## NetworkManager and netctl conflict
|
|||
|
If your system is running some `/sys/.../subnet...` for 90s at startup, likely
|
|||
|
netctl is trying to start up a device, though the device name has changed.
|
|||
|
Places to check:
|
|||
|
|
|||
|
/etc/NetworkManager/system-connections/
|
|||
|
cd /etc/systemd/system/multi-user.target.wants/ && rg enp0s3
|
|||
|
vi /etc/systemd/system/multi-user.target.wants/netctl@enp4s0.service
|
|||
|
vi netctl@enp4s0.service
|
|||
|
|
|||
|
If you are using both by accident, make sure to use the native disable in
|
|||
|
addition to the systemd disable. For example, with netctl:
|
|||
|
|
|||
|
systemctl disable netctl
|
|||
|
systemctl disable netctl@enp4s0.service
|
|||
|
netctl disable enp4s0
|
|||
|
|
|||
|
## Public networks
|
|||
|
Public networks often use a captive portal to make users accept their terms and
|
|||
|
conditions
|
|||
|
|
|||
|
1. Connect to the network using `nmtui` or similar
|
|||
|
2. Use a GUI browser and navigate to any site
|
|||
|
3. If that doesn't work, try navigating to a non-https using page
|
|||
|
4. If that doesn't work, try navigating to a site you've never visited in incognito
|
|||
|
5. If that doesn't work, try navigating to the router at 192.168.[0-1].[0-1]
|
|||
|
|
|||
|
# Bluetooth
|
|||
|
Before starting bluetooth, make sure bluetooth.service is running, otherwise
|
|||
|
nothing will work
|
|||
|
|
|||
|
```bash
|
|||
|
systemctl start bluetooth.service
|
|||
|
```
|
|||
|
|
|||
|
You may optionally install the `blueberry` GUI package. It's quite light and
|
|||
|
limited, though it's a good way to check if your devices are connected
|
|||
|
|
|||
|
## Keyboard
|
|||
|
Start `bluetoothctl`. The command sequence to connect will look something like:
|
|||
|
|
|||
|
$ bluetoothctl
|
|||
|
[bluetooth]# power on
|
|||
|
[bluetooth]# agent off
|
|||
|
[bluetooth]# agent KeyboardOnly
|
|||
|
[bluetooth]# scan on
|
|||
|
[bluetooth]# pair <MAC-ADDR>
|
|||
|
[bluetooth]# trust <MAC-ADDR>
|
|||
|
[bluetooth]# connect <MAC-ADDR>
|
|||
|
[bluetooth]# quit
|
|||
|
|
|||
|
When you turn `scan on`, the list may explode with various mac addresses. Try to
|
|||
|
find your keyboard amongst those. During the `pair` section, `bluetoothctl` may
|
|||
|
prompt you with 6 digits. Type those on the keyboard and possibly hit enter
|
|||
|
after them
|
|||
|
|
|||
|
See the [Archwiki page](https://wiki.archlinux.org/title/bluetooth_keyboard) for
|
|||
|
more info
|
|||
|
|
|||
|
## Bluetooth headphones
|
|||
|
This section connected AirPods Pro. Setup may differ for other devices
|
|||
|
|
|||
|
Start by connecting your headphones with a very similar set of steps as the
|
|||
|
keyboard guide above. Use `default-agent` instead of `agent KeyboardOnly`. For
|
|||
|
example:
|
|||
|
|
|||
|
$ bluetoothctl
|
|||
|
[bt]# power on
|
|||
|
[bt]# default-agent
|
|||
|
[bt]# scan on
|
|||
|
[NEW] Device 00:8A:76:4D:9B:BB Anna’s Airpods
|
|||
|
[bt]# trust 00:8A:76:4D:9B:BB
|
|||
|
[bt]# pair 00:8A:76:4D:9B:BB
|
|||
|
[bt]# connect 00:8A:76:4D:9B:BB
|
|||
|
|
|||
|
Once connected, blue headphones may cutout or just not play back anything. This
|
|||
|
is a PulseAudio issue. The bluetooth sound latency may need to be adjusted
|
|||
|
|
|||
|
Start by finding your bluetooth card's name with
|
|||
|
|
|||
|
$ pactl list | grep -Pzo '.*bluez_card(.*\n)*'
|
|||
|
|
|||
|
Next increase the audio latency. 50000ms seems to work well for AirPods Pro,
|
|||
|
though this is likely [different for other
|
|||
|
headphones](https://askubuntu.com/questions/475987/a2dp-on-pulseaudio-terrible-choppy-skipping-audio)
|
|||
|
|
|||
|
$ pactl set-port-latency-offset bluez_card.00_8A_76_4D_9B_BB headphone-output 50000
|
|||
|
$ systemctl restart bluetooth.service
|
|||
|
|
|||
|
Repeat the steps above, adjusting the bluetooth sound latency, until it works.
|
|||
|
Consider using the `blueberry` GUI to quickly reconnect the headphones on each
|
|||
|
bluetooth.service restart. Don't forget to relaunch `blueberry` every time too
|
|||
|
|
|||
|
```bash
|
|||
|
kill $(pgrep ^blueberry$) && systemctl restart bluetooth.service && blueberry &
|
|||
|
```
|
|||
|
|
|||
|
# Enterprise networks
|
|||
|
Large organizations, like universities, use enterprise security on their
|
|||
|
networks. These require an account to login, not just a password
|
|||
|
|
|||
|
The guide below assumes the network's name is "UWS" and your login username is
|
|||
|
"emiliko"
|
|||
|
|
|||
|
You can install the optional `nm-connection-editor` to make things easier
|
|||
|
|
|||
|
$ nmcli device wifi list
|
|||
|
This should show the network you're looking for
|
|||
|
|
|||
|
If your network is not using PAP authentication, it may be possible to just
|
|||
|
connect with a simple password, try:
|
|||
|
|
|||
|
```bash
|
|||
|
nmcli --ask device wifi connect UWS
|
|||
|
```
|
|||
|
|
|||
|
Otherwise run this line, replacing the necessary information in the line above.
|
|||
|
Particularly `UWS`, `emiliko` and `wlan0`. For `wlan0`, find your wifi device
|
|||
|
with `ip link`. `enp...` is usually ethernet
|
|||
|
|
|||
|
```bash
|
|||
|
nmcli connection add type wifi con-name "UWS" ifname wlan0 ssid "UWS" -- wifi-sec.key-mgmt wpa-eap 802-1x.eap ttls 802-1x.phase2-auth mschapv2 802-1x.identity "emiliko"
|
|||
|
```
|
|||
|
|
|||
|
## Option 1: With nm-connection-editor
|
|||
|
Open `nm-connection-editor`. Go into "Wifi-Security" and make it look like:
|
|||
|
|
|||
|
WPA & WPA2 Enterprise
|
|||
|
Tunnled TLS
|
|||
|
CA Certificate: (None)
|
|||
|
Check No CA certificate required
|
|||
|
Inner authentication: PAP
|
|||
|
Type in your login credentials at the bottom. Now run
|
|||
|
|
|||
|
## Option 2: Without nm-connection-editor
|
|||
|
If you don't have the GUI tool `nm-connection-editor` and no way to install it,
|
|||
|
you can try editing the network's profile directly. The relevant file is at
|
|||
|
`/etc/NetworkManager/system-connections/UWS.nmconnection`
|
|||
|
|
|||
|
This file should look something like below, with relevant information replaced.
|
|||
|
The file can only be accessed by root
|
|||
|
|
|||
|
```
|
|||
|
[connection]
|
|||
|
id=UWS
|
|||
|
uuid=cb62f680-e1da-41c9-bfa0-35e7ef6f5137
|
|||
|
type=wifi
|
|||
|
interface-name=wlan0
|
|||
|
timestamp=1657043376
|
|||
|
|
|||
|
[wifi]
|
|||
|
mode=infrastructure
|
|||
|
ssid=UWS
|
|||
|
|
|||
|
[wifi-security]
|
|||
|
key-mgmt=wpa-eap
|
|||
|
|
|||
|
[802-1x]
|
|||
|
eap=ttls;
|
|||
|
identity=emiliko
|
|||
|
password=PutYourPasswordInPlainTextHere_YesPlainText
|
|||
|
phase2-auth=pap
|
|||
|
|
|||
|
[ipv4]
|
|||
|
method=auto
|
|||
|
|
|||
|
[ipv6]
|
|||
|
addr-gen-mode=stable-privacy
|
|||
|
method=auto
|
|||
|
|
|||
|
[proxy]
|
|||
|
```
|
|||
|
|
|||
|
Alternatively, use the file above as a reference to edit it via
|
|||
|
|
|||
|
```bash
|
|||
|
nmcli connection edit UWS
|
|||
|
```
|
|||
|
|
|||
|
## After setting up above
|
|||
|
```bash
|
|||
|
nmcli device wifi connect UWS
|
|||
|
```
|
|||
|
|
|||
|
NetworkManager takes a bit, about 30s, to finish authentication. This will also
|
|||
|
happen during boot, so you can't use the network right away
|
|||
|
|
|||
|
If your network does not use PAP authetication, it might just work to type the
|
|||
|
password in
|
|||
|
|
|||
|
```bash
|
|||
|
nmcli --ask device wifi connect UWS
|
|||
|
```
|