Разработки проекта PuppyRus > Программирование и компиляция

Скрипт для простой настройки проводного и беспроводного соединения.

(1/4) > >>

totiks2012:
Этот скрипт часть 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


--- Конец кода ---

imp:
enp, wlp... У меня eth и wlan.
ip link | cut -f2 -d':' | sed -n '/^ /p'
SSID тоже лениво руками вводить. Можно предложить выбор из
iwlist scan 2>&1 | grep ESSID | cut -f2 -d':'

Ну и выбор типа соединения лишний, как мне кажется. Кто возьмется подключаться из консоли, тому достаточно дать названия интерфейсов.
Лучше сделать выбор между dhcp-клиентом и ручным вводом ip, маски, шлюза и dns

totiks2012:

--- Цитата: imp от 19 Март 2024, 07:54:14 ---Ну и выбор типа соединения лишний, как мне кажется. Кто возьмется подключаться из консоли, тому достаточно дать названия интерфейсов.
Лучше сделать выбор между dhcp-клиентом и ручным вводом ip, маски, шлюза и dns
--- Конец цитаты ---
сделал выбор так как иногда нужно беспроводное, да и интересно очень было разобраться с этим, ввод SSID один раз в конфиге, дальше лезть туда  не нужно будет, только что подумал что нужно также перед включением проводного также нужно ронять беспроводной, как роняю проводной перед включением беспроводного. C ручным вводом ip никогда не пользовался у меня соединение всегда через dhcp подключалось, если нужно можно и организовать. Насчет разных имен [enp, wlp... У меня eth и wlan.] принял буду думать.
-----------
upd: Всё вопрос с разными именами решил, но требует тестов, вечером уже опубликую, после тестирования.

sfs:
Для начала хорошо бы ознакомиться с имеющимися аналогами:
https://aur.archlinux.org/packages/wpa_supplicant_gui
netctl + netctl.sh - тут есть GUI аналог wifi-menu
https://wiki.puppyrus.org/setups/start#оборудование_настройка_сети_из_консоли У Дяди Шурика еще были работы на эту тему

Проблемы вашего скрипта:
1. сеть должна запускаться на стадии инициализации системы, до старта Х.  Т.е. надо конфиг и сервис его запуска. Это уже есть готовое - netctl. Нет смысла изобретать. А вот GUI нормального для netctl нет
2.

--- Цитата: totiks2012 от 19 Март 2024, 05:17:17 ---после того как сохраним $HOME/.config/wl.conf
--- Конец цитаты ---
лажа. Надо гуй автоопределения и ввода пароля. Можно выдрать из моего netctl.sh
3. dmenu не содержит TK зависимостей. В любом ДЕ будет выглядеть чужеродно. Лучше делать на yad
4. Пароли хорошо бы хранить в зашифрованном виде
5. Хорошо бы иметь в трее инфу о качестве вифи соединения

totiks2012:

--- Цитата: sfs от 19 Март 2024, 09:48:40 --- dmenu не содержит TK зависимостей. В любом ДЕ будет выглядеть чужеродно. Лучше делать на yad
--- Конец цитаты ---
мне dmenu очень понравилось, выглядит лаконично и стильно, в конечном итоге скрипт нужен один раз, можно и без dmenu... насчет сеть должна запускаться на стадии инициализации системы, до старта Х, почему? Я запускал скрипт и из X всё отрабатывает, сеть запускается, то есть я просто не знаю почему есть это правило,не понимаю просто оно работает и та к и так, остальное перечисленное вами принял во внимание, ибо так и есть как вы подметили, то есть с остальным согласен.

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии