2012-12-30 85 views
0

我有一個bash腳本,只有當我的筆記本電腦連接到網絡時,纔會使用notify-OSD打印通知。所以我已經將bash腳本放在/etc/network/if-up.d中自動運行時Bash腳本無法正常工作

我在文件中打印了一些日誌消息,以確認腳本確實在運行。但通知事情似乎並不奏效。我只是說此行的文件

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的名稱文件,然後我看到通知工作完美。爲什麼會這樣?我怎樣才能解決這個問題?我使用在/ tmp /跟蹤的Ubuntu 12.04

輸出:

+ 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' 

回答

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

我懷疑的環境問題。

因此,在你的腳本,把:

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

感謝您的回覆。只是要清楚,你的意思是我需要添加這樣的東西:#!源〜/ .bashrc ||/etc/profile而不是通常的#!/ bin/bash? –

+1

@VivekPradhan,no,'source'應該放在'#!/ bin/bash'之後的* next *行中 –

+0

Ok @sputnick我試過這個: #!bin/bash source〜/ .bashrc ||源/ etc/profile,但我仍然看不到通知。你可以嘗試使用一個簡單的bash腳本來顯示通知,並將它放在/etc/network/if-up.d中,讓我知道你是如何工作的。 –

0

如果你正在運行的程序需要X,它不能運行沒有X.要麼以某種方式授權它連接到你的X會話,或運行從你的X會話中。

+0

非常感謝@triplee的回覆。我想你是對的,但我不明白爲什麼它需要Xauthorisation?我會試着找出如何導出Xsession變量進行授權。 –

相關問題