Этот скрипт часть dmenu-utils которые для себя пишу по тихому. Скрипт позволяет установить проводное или беспроводного соединение.
Зависимости apt,ip, rfkill,dhclient,dmenu. Также перед первым запуском скрипта необходимо в $HOME/.config/wl.conf прописать
в первой строке SSID
в второй PSK точки доступа
например
LOGINUSER
P1254_tr
после того как сохраним $HOME/.config/wl.conf запускаем скрипт
если забудем создать $HOME/.config/wl.conf скрипт каждый раз при запуске будет запрашивать ввод SSID и PSK, потому лучще один раз создать $HOME/.config/wl.conf
Выбираем тип соединения, далее скрипт всё сам сделает. После перезагрузки запомнит настройки то есть скрипт нужно будет запускать только 1 раз.
Ремарка работает только там где нет запущеных сетевых служб типа NM или Wicd, если они есть лучше их остановить, ибо они мешают скрипту.
Скрипт в стадии отладки. Прошу тестов.
#!/bin/bash
sudo apt install rfkill
sudo rfkill unblock wlan
# Read SSID from the first line of ~/.config/wl.conf
SSID=$(head -n 1 ~/.config/wl.conf)
# Read PSK from the second line of ~/.config/wl.conf
PSK=$(sed -n '2p' ~/.config/wl.conf)
# If ~/.config/wl.conf doesn't exist or doesn't have both lines, prompt for input
if [ -z "$SSID" ] || [ -z "$PSK" ]; then
SSID=$(echo -e "Enter Wi-Fi SSID" | dmenu -i -l 10)
PSK=$(echo -e "Enter Wi-Fi password" | dmenu -i -l 10)
fi
# Предлагаем выбор типа соединения
CONNECTION_TYPE=$(echo -e "Provodnoe\nBesprovodnoe" | dmenu -i -l 10)
if [ "$CONNECTION_TYPE" == "Provodnoe" ]; then
# Извлекаем имя устройства проводного соединения
DEVICE=$(ip a | grep -o 'enp[^[:space:]]*' | head -n 1)
# Поднимаем проводное соединение
sudo dhclient -v $DEVICE
sudo systemctl restart dhclient@$DEVICE.service
elif [ "$CONNECTION_TYPE" == "Besprovodnoe" ]; then
# Извлекаем имя устройства беспроводного соединения
DEVICE=$(ip a | grep -o 'wlp[^[:space:]]*' | head -n 1)
DEVICE_ENP=$(ip a | grep -o 'enp[^[:space:]]*' | head -n 1)
sudo ip link set "$DEVICE_ENP" down
# Проверяем, существует ли файл
if [ -f /etc/wpa_supplicant/wpa_supplicant.conf ]; then
# Проверяем, не пустой ли файл
if [ $(stat -c%s /etc/wpa_supplicant/wpa_supplicant.conf) -ne 0 ]; then
# Если файл существует и не пустой, продолжаем работу со существующим файлом
echo "Файл /etc/wpa_supplicant/wpa_supplicant.conf существует и не пустой, используем существующий файл."
else
# Если файл существует, но пустой, записываем конфигурацию
echo "ctrl_interface=/run/wpa_supplicant
update_config=1
network={
ssid=\"$SSID\"
psk=\"$PSK\"
}" | sudo tee /etc/wpa_supplicant/wpa_supplicant.conf > /dev/null
fi
else
# Если файла не существует, создаем его и записываем конфигурацию
echo "ctrl_interface=/run/wpa_supplicant
update_config=1
network={
ssid=\"$SSID\"
psk=\"$PSK\"
}" | sudo tee /etc/wpa_supplicant/wpa_supplicant.conf > /dev/null
fi
# Разблокируем устройство
#sudo rfkill unblock wlan
sudo pkill wpa_supplicant
# Запускаем wpa_supplicant
sudo wpa_supplicant -B -i $DEVICE -c /etc/wpa_supplicant/wpa_supplicant.conf
sudo systemctl restart wpa_supplicant
# Запускаем dhclient
sudo dhclient $DEVICE
fi