Bash脚本在自动运行时无法正常工作

时间:2012-12-30 16:43:41

标签: bash networking ubuntu notifications system

我有一个bash脚本,仅当我的笔记本电脑连接到网络时才使用notify-OSD打印通知。所以我将bash脚本放在/etc/network/if-up.d

我将一些日志消息打印到文件中以确认脚本确实正在运行。但是通知事情似乎不起作用。我刚刚将这一行添加到文件

 notify-send -u 'critical' -i /home/vivek/Downloads/proxy.ico 'SetProxy Status' 'proxy set to auto'

然而,当我从终端显式地(通过双击它或)运行该脚本时,如下所示:

cd /etc/network/if-up.d
./setproxy

setproxy是bash文件的名称,然后我看到通知工作正常。为什么会这样?我怎样才能解决这个问题?我使用的是ubuntu 12.04

/ tmp / trace中的输出:

+ nmcli con status
+ grep -q 'Hostel\|IITD'
+ '[' 1 -eq 0 ']'
+ gsettings set org.gnome.system.proxy mode none

** (process:12320): WARNING **: Command line `dbus-launch     --autolaunch=673e71ca3fc5f402403d22380000000a --binary-syntax --close-stderr' exited with non-zero exit status 1: Autolaunch error: X11 initialization failed.\n

** (process:12320): WARNING **: Command line `dbus-launch --autolaunch=673e71ca3fc5f402403d22380000000a --binary-syntax --close-stderr' exited with   non-zero exit status 1: Autolaunch error: X11 initialization failed.\n
+ echo 'You are outside college! No Proxy'
+ notify-send -u critical -i /home/vivek/Downloads/proxy.ico 'SetProxy Status' 'You are outside college, proxy set to none'

3 个答案:

答案 0 :(得分:2)

如果你想使用DISPLAY,你也必须设置XAUTHORITY,但这有点复杂(取决于用户名和随机字符串)试试这个:

#!/bin/bash

export displayOwner=vivek     # enter your usename here
export DISPLAY=:0
export XAUTHORITY=$(echo /var/run/gdm3/auth-for-${displayOwner}-*/database)

notify-send -u 'critical' -i /home/vivek/Downloads/proxy.ico 'SetProxy Status' 'proxy set to auto'

答案 1 :(得分:1)

我怀疑是环境问题。

所以在你的脚本中,输入:

#!/bin/bash -x

source ~/.bashrc || source /etc/profile
exec &>/tmp/trace
# rest of the script there

并告诉我们发生了什么。

修改:您的脚本应该以:

开头
#!/bin/bash

source ~/.bashrc || source /etc/profile
export DISPLAY=:0
# rest of the script there

答案 2 :(得分:0)

如果您运行的程序需要X,则无法在没有X的情况下运行。要么以某种方式授权它连接到您的X会话,要么在X会话中运行它。