Reinicie a rede com um comando sem precisar fornecer senha

4

A rede sem fio no meu laptop dell desaparece muitas vezes quando retomou de 'suspender'. Depois que eu executo 'sudo service network-manager restart', ele começa a funcionar.

Eu queria saber se havia uma maneira de reiniciar a rede enquanto retomava da suspensão e apenas se a rede sem fio não estava funcionando! Qual seria a melhor maneira de reiniciar a rede sem ter que digitar uma senha?

Eu não quero fazê-lo manualmente indo até o ícone de rede e, em seguida, tomando algumas ações do mouse. Eu preferi ter um comando que eu poderia configurar como um atalho. Eu tentei criar um executável bash com o conteúdo 'service network-manager restart' e definir setuid no executável, bem como dar a root a propriedade dele, mas isso não funcionou.

Eu tenho Ubuntu 14.04 Trusty OS.

    
por Champ 22.09.2015 / 17:10

4 respostas

0

Eu finalmente acabei escrevendo o script /etc/pm/sleep.d/0000_custom:

#!/bin/sh
# /etc/pm/sleep.d/0000_custom
# Action script to lock screen and resume wifi properly
PATH=/sbin:/usr/sbin:/bin:/usr/bin
case "" in
    suspend|hibernate)
        #do nothing
    ;;
    resume|thaw)
        X_USER='who| grep ' :0'|cut -f1 -d' ''
# lock screen when resuming from suspend
        sudo -u $X_USER xscreensaver-command -lock
# turn wifi on when resuming from suspend
        nmcli nm wifi on
    ;;
esac
exit 0

Obrigado ao @RMano e @Nephente pelas suas respostas.

    
por Champ 07.10.2015 / 22:11
5

Você pode fazer uma alteração em sudoers para permitir que sua conta de usuário execute os comandos necessários sem senha.

Aviso : certifique-se de não excluir nada de sudoers sem saber exatamente para que serve isso. Você poderia perder todos os privilégios de administrador.

  1. Abrir sudo visudo
  2. Na seção intitulada "Cmnd alias specification" add

    Cmnd_Alias NETWORK = /usr/sbin/service network-manager restart
    

    NETWORK é apenas um alias para um grupo de comandos. Dê um nome diferente se preferir!

  3. No final do arquivo, anexe a declaração

    user_name ALL = (ALL) NOPASSWD: NETWORK
    

    em que você substitui sua conta de usuário por user_name . Também substitua NETWORK pelo nome que você forneceu ao alias. Pode-se também fazer sem o alias e simplesmente substituí-lo pelo comando, mas eu prefiro assim. Acho que isso mantém as coisas mais organizadas.

  4. Safe o arquivo e saia do editor. Verifique com sudo -l se você está autorizado a emitir o comando.

Você ainda precisa prefixar o comando com sudo , mas não será mais solicitada uma senha.

    
por Nephente 22.09.2015 / 17:31
5

Outra possibilidade é usar a interface de linha de comando do Network Manager (não é tão "strong" como reiniciar o daemon, mas funcionou para mim). Nesse caso, a operação é exatamente igual a se você interagir com o applet, portanto, não precisa de nenhum privilégio.

Para reiniciar a interface wifi, use este código:

nmcli nm wifi off
sleep 5
nmcli nm wifi on

Eu tive problemas semelhantes com a queda da rede (no meu caso era um roteador defeituoso), então usei esse script adicionado ao trabalhos de inicialização :

#!/bin/bash
PINGTEST=192.168.1.1 # my router, change here. google.com should work anytime ;-)
while /bin/true; do
    if ! [ "$(ping -c 1 $PINGTEST)" ]; then
        echo "Warning: connection lost at $(date) -- restart" 1>&2  
        nmcli nm wifi off
        sleep 5
        nmcli nm wifi on
        sleep 60
        if ! [ "$(ping -c 1 $PINGTEST)" ]; then
             echo "Waiting for connection going up at $(date)" 1>&2
             sleep 60
        else 
             echo "Connection on at $(date)" 1>&2
        fi
#    else
#        echo "Connection OK on $(date)" 1>&2
    fi
sleep 60
done

verifica a conexão a cada minuto e, se não funcionar, reinicia o wifi.

Se isso não for suficiente, você provavelmente precisará usar armas mais strongs, como iniciar / parar o Network Manager. Mesmo que em algum momento falhar em mim, e eu tenho que recorrer para descarregar ( sudo rmmod ) e, em seguida, recarregar ( sudo modprobe ) o módulo do driver da placa wifi.

    
por Rmano 22.09.2015 / 20:17
2

Você deve poder adicionar algo semelhante a isso:

YourUserName ALL=NOPASSWD: service network-manager restart

ao seu arquivo / etc / sudoers e será capaz de reiniciar o gerenciador de rede com seu script.

    
por Michal Tomczuk 22.09.2015 / 17:30