私のスクリプトがif.upで実行されないのはなぜですか?

私のスクリプトがif.upで実行されないのはなぜですか?

synergy私のラップトップWi-Fiカードがネットワークに接続されるたびに起動するスクリプトを実行したいです(今は誰でも後でフィルタを追加します)。だから私は次のように "/etc/network/if-up.d/999startsynergy"スクリプトを作成しました。

#!/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

しかし、ネットワークカードを無効にして再度有効にすると何も起こりませんが、./999startsynergy up手動で行うと正常に動作します!また、5秒の遅延を適用または適用せずに試みました。同じです。ここで何が起こるのか知っていますか?

答え1

相乗効果X11サーバー(ディスプレイ)へのアクセスが必要で、通常は通常のユーザーとしても実行する必要があります。

スクリプトは次の場所にあります。/etc/network/if-up.d/次のように順次実行、X11ディスプレイにアクセスできないため機能しません。

できることは整理するだけです相乗効果正しいX11ディスプレイに接続してください(これは:0、通常)DISPLAY環境変数を設定するか、「--display」オプションを指定して相乗効果

また、使用することができますSudo正しいユーザーから始めてください(必ずしも必要ではありませんが、とにかく良い考えです)。

以下は、実験できる小さなテストスクリプトです。

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

変えるあなたのユーザー名一般アカウントのユーザー名を使用し、無線LAN 0Wi-Fiインターフェース名(他の場合)を入力して時計インストールして(通常はx11-appsパッケージの一部です)/etc/network/if-up.d/をクリックし、ネットワークインターフェイスを開いて閉じます。

すべてがうまくいけば時計インターフェイスに上がるたびにポップアップが表示され、それを変更して起動できます。相乗効果代わりに。

関連情報