Por que meu script não é executado em if.up

1

Eu quero executar um script que inicie synergy sempre que minhas placas de Wi-Fi do laptop conectarem-se a uma rede (por enquanto, qualquer um, adicionarei um filtro posteriormente). Então eu escrevi um script '/etc/network/if-up.d/999startsynergy' que se parece com:

#!/bin/bash
########################################################################
# script to start synergy 
# for remote mouse & keyboard control
# from my Desktop PC & work laptop
# script by: Ron Eggler 11/05/2016
#
########################################################################
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
########################################################################
#
# Configuration:
#
host1='DesktopHome'
host2='GEnotebook'
bin='/usr/bin/synergyc'

case $1 in
        up)
        sleep 5
        $bin $host1
        $bin $host2
        ;;
        *) exit 0
esac
exit 0

mas nada acontece quando desativo e reativo minha placa de rede, mas se eu executar ./999startsynergy up manualmente, funciona muito bem! Eu também tentei com o & sem o atraso de 5 segundos - a mesma coisa ... alguma ideia do que pode estar acontecendo aqui?

    
por cerr 06.11.2016 / 00:44

1 resposta

2

O

synergyc requer um acesso ao servidor X11 (display), e normalmente deve ser executado como um usuário comum também.

Scripts em /etc/network/if-up.d / , por sua vez, são executados como root e não têm acesso ao seu monitor X11, que é porque não funciona para você.

O que você pode fazer é configurar o synergyc para se conectar a uma tela X11 adequada (que será : 0 , geralmente), configurando uma variável de ambiente DISPLAY, ou fornecendo a opção "--display" para o synergyc .

Você também pode usar o sudo para iniciá-lo como um usuário adequado (que não é estritamente necessário, mas é provavelmente uma boa idéia de qualquer maneira).

Aqui está um pequeno script de teste para você experimentar:

#!/bin/sh
[ "$IFACE" = "wlan0" ] || exit 0
export DISPLAY=:0
sudo -u YOUR_USER_NAME xclock &

Substitua YOUR_USER_NAME pelo nome de usuário da sua conta normal e wlan0 pelo nome da sua interface wi-fi (caso seja diferente) e também certifique-se de ter < em> xclock instalado (normalmente faz parte do pacote x11-apps), coloque-o em seu /etc/network/if-up.d / e tente alternar a rede interface em um off.

Se tudo der certo, um xclock aparecerá toda vez que sua interface for ativada, e você poderá modificá-la para iniciar o synergyc .

    
por 07.11.2016 / 10:27