Появилась задача настраивать сеть через гуёвое приложение, ни gtk ни qt не знаю, нагуглил gtkdialog, на нем и написал.

Требуется пакет gtkdialog !!


Как работает программа:
Если вы перешли на новый вид оформления настроек сети в /etc/rc.conf, то программа вам подойдет.
Программа парсит rc.conf на наличие строк

  • address=
    netmask=
    gateway=

    Комментарии обходит, найдя строки, показывает их значения.
    Параметры записываются в rc.conf (используется sudo, в консоли спросит пароль).
    Если нажали “Автоматически”, то после нажатия Сохранить, в rc.conf параметры сотрутся (это требуется для dhcp настройки).

    При заполнении полей DNS, программа перезаписывает /etc/resolv.conf, если вы очистили все поля, и у вас выбран режим статической настройки, то resolv.conf не изменится (защита от случаяного стирания). Когда вы выбираете Автоматическую (DHCP) настройку, файл resolv.conf вообще не трогается, т.к. после перезапуска сети, он все равно перезапишется.

    После нажатия на кнопку “Сохранить” все параметры записываются в rc.conf и resolv.conf и перезапускается сеть (/etc/rc.d/network restart)!!!

    Вот сам скрипт:

    #!/bin/bash
    #archnetcfg by aivs from archlinux.org.ru
    export MAIN_DIALOG='
    <window title="Сетевые настройки" resizable="false">
    <vbox>
     <radiobutton active="false">
      <label>Автоматическая настройка</label>
      <variable>RADIOBUTTON2</variable>
      <action>Disable:IP</action>
      <action>Disable:NETMASK</action>
      <action>Disable:GATEWAY</action>
      <action>Disable:DNS1</action>
      <action>Disable:DNS2</action>
      <action>Disable:DNS3</action>
     </radiobutton>
     
     <radiobutton active="true">
      <label>Ручная настройка</label>
      <variable>RADIOBUTTON1</variable>
      <action>Enable:IP</action>
      <action>Enable:NETMASK</action>
      <action>Enable:GATEWAY</action>
      <action>Enable:DNS1</action> 
      <action>Enable:DNS2</action>
      <action>Enable:DNS3</action>
     </radiobutton>
     
     
     <hbox>
     <text>
      <label>IP адрес</label>
     </text>
     <entry>
      <input>sed -n "/^[^#]*address=/ ! d; s/.*=//p" /etc/rc.conf</input>
      <variable>IP</variable>
     </entry>
     </hbox>
     
     <hbox>
     <text>
      <label>Маска сети</label>
     </text>
     <entry>
      <input>sed -n "/^[^#]*netmask=/ ! d; s/.*=//p" /etc/rc.conf</input>
      <variable>NETMASK</variable>
     </entry>
     </hbox>
     
     <hbox>
     <text>
      <label>Шлюз</label>
     </text>
     <entry>
      <input>sed -n "/^[^#]*gateway=/ ! d; s/.*=//p" /etc/rc.conf</input>
      <variable>GATEWAY</variable>
     </entry>
     </hbox>
     
     <hbox>
     <text>
      <label>DNS1</label>
     </text>
     <entry>
      <input>sed -e '/^#/d' /etc/resolv.conf | sed -n '1p'| sed -e "s/nameserver //g"</input>
      <variable>DNS1</variable>
     </entry>
     </hbox>
     
     <hbox>
     <text>
      <label>DNS2</label>
     </text>
     <entry>
      <input>sed -e '/^#/d' /etc/resolv.conf | sed -n '2p'| sed -e "s/nameserver //g"</input>
      <variable>DNS2</variable>
     </entry>
     </hbox>
     <hbox>
     <text>
      <label>DNS3</label>
     </text>
     <entry>
      <input>sed -e '/^#/d' /etc/resolv.conf | sed -n '3p'| sed -e "s/nameserver //g"</input>
      <variable>DNS3</variable>
     </entry>
     </hbox>
     <hbox>
      <button>
      <label>Сохранить</label>
      <action> [ "$RADIOBUTTON2" = "true" ] &&  sudo sed -i 's/^[^#]*address=.*/address=/' /etc/rc.conf</action>
      <action> [ "$RADIOBUTTON2" = "true" ] &&  sudo sed -i 's/^[^#]*netmask=.*/netmask=/' /etc/rc.conf</action>
      <action> [ "$RADIOBUTTON2" = "true" ] &&  sudo sed -i 's/^[^#]*gateway=.*/gateway=/' /etc/rc.conf</action>
      <action> [ "$RADIOBUTTON2" = "true" ] &&  sudo /etc/rc.d/network restart &</action>
      <action> [ "$RADIOBUTTON1" = "true" ] &&  sudo sed -i "s/^[^#]*address=.*/address=$IP/" /etc/rc.conf</action>
      <action> [ "$RADIOBUTTON1" = "true" ] &&  sudo sed -i "s/^[^#]*netmask=.*/netmask=$NETMASK/" /etc/rc.conf</action>
      <action> [ "$RADIOBUTTON1" = "true" ] &&  sudo sed -i "s/^[^#]*gateway=.*/gateway=$GATEWAY/" /etc/rc.conf</action>
      <action> [ -n "$DNS1" ] || [ -n "$DNS2" ] || [ -n "$DNS3" ] && echo "#Generated by archnetcfg.sh" | sudo tee /etc/resolv.conf</action>
      <action> [ "$RADIOBUTTON1" = "true" ] &&  [ -n "$DNS1" ] && echo "nameserver $DNS1" | sudo tee -a /etc/resolv.conf </action>
      <action> [ "$RADIOBUTTON1" = "true" ] &&  [ -z "$DNS1" ] && : </action>
      <action> [ "$RADIOBUTTON1" = "true" ] &&  [ -n "$DNS2" ] && echo "nameserver $DNS2" | sudo tee -a /etc/resolv.conf </action>
      <action> [ "$RADIOBUTTON1" = "true" ] &&  [ -z "$DNS2" ] && : </action>
      <action> [ "$RADIOBUTTON1" = "true" ] &&  [ -n "$DNS3" ] && echo "nameserver $DNS3" | sudo tee -a /etc/resolv.conf </action>
      <action> [ "$RADIOBUTTON1" = "true" ] &&  [ -z "$DNS3" ] && : </action>
      <action> [ "$RADIOBUTTON1" = "true" ] &&  sudo /etc/rc.d/network restart &</action>
      <action type="exit">OK</action>
      </button>
      <button cancel>
      <label>Отменить</label>
      </button>
     </hbox>
    </vbox>
    </window>
    '
    gtkdialog --program=MAIN_DIALOG