为什么我的脚本没有在 if.up 上执行

为什么我的脚本没有在 if.up 上执行

我想执行一个synergy每当我的笔记本电脑 wifi 卡连接到网络时启动的脚本(目前任何一个,我稍后会添加一个过滤器)。所以我写了一个脚本“/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

协同作用c需要访问 X11 服务器(显示),并且通常也应该以普通用户身份运行。

脚本位于/etc/network/if-up.d/依次运行为,并且无权访问您的 X11 显示器,这就是它不适合您的原因。

你能做的就是配置协同作用c连接到正确的 X11 显示器(这将是:0,通常),通过设置 DISPLAY 环境变量,或提供“--display”选项协同作用c

您还可以使用须藤以正确的用户身份启动它(这不是绝对必要的,但无论如何可能是一个好主意)。

这是一个小测试脚本,供您进行实验:

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

代替您的用户名使用您的常规帐户用户名,以及无线局域网0与您的 Wi-Fi 接口名称(如果不同),并确保您有时钟安装(它通常是 x11-apps 包的一部分),然后将其放置到您的/etc/network/if-up.d/,然后尝试打开和关闭网络接口。

如果一切顺利的话时钟每次你的界面上去都会弹出,然后你可以修改这个来启动协同作用c反而。

相关内容