Tôi đang triển khai thông báo cắm / rút USB ( câu hỏi liên quan ở đây ) và tôi cần thực hiện một cái gì đó như notify-send "device plugged" "My Device Title"
. Vấn đề là để làm cho lệnh này hoạt động, trước tiên tôi nên đặt DISPLAY
, như thế này:
export DISPLAY=":0.0"
Và thứ hai, lệnh này nên được gọi bởi người dùng thích hợp. Nói, cho người dùng dimon
:
su dimon -c "notify-send 'device plugged' 'My Device Title'"
Vì vậy, tôi cần lấy danh sách tất cả các phiên X hoạt động và người dùng phù hợp và gọi notify-send
cho từng người dùng trên đó DISPLAY
.
Tôi đã cố gắng sử dụng w
cho điều đó, ví dụ đầu ra tại Linux Mint 13 MATE:
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
dimon tty8 :0 Sun15 3days 1:38m 1.95s x-session-manager
dimon pts/0 :0 Sun15 0.00s 0.20s 0.00s tmux
Vì vậy, chúng tôi có cả tên người dùng và hiển thị. Tôi quyết định phân tích nó như thế:
declare -a logged_users=(`w |grep -vP "^(USER| )" |awk '{if (NF==8){print $1" "$3} else {print $1" :0"}}' |sort |uniq`)
Bây giờ, tôi có mảng logged_users
: [0]
chứa dimon
và [1]
chứa :0
. Điều này sẽ là tuyệt vời, nhưng tiếc là nó hoạt động không phải ở khắp mọi nơi. Giả sử, trên Ubuntu 12.04 với lightdm, chúng ta có w
đầu ra này :
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
nui tty7 18:22 35:56 1.66s 0.11s gnome-session -
nui pts/0 :0.0 18:55 5.00s 0.20s 0.00s w
Không biết tại sao không có giá trị TỪ cho gnome-session
. Và thậm chí tệ hơn, tại xubfox:
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
nui tty7 15:50 31:07 52.55s 0.13s /bin/sh /etc/xd
Không có màn hình nào cả! Nếu người dùng khác đăng nhập, không có màn hình nào được chỉ định cho anh ta (nhưng thực tế là vậy :1.0
)
Vì vậy, tôi đang tìm kiếm một cách tiếp cận khác. Tôi cũng biết chúng tôi có một danh sách tất cả các phiên X đang hoạt động ở đây: /tmp/.X11-unix
và tôi có thể lấy danh sách của chúng như thế này:
cd /tmp/.X11-unix && for x in X*; do echo ":${x#X}"; done
Nhưng sau đó, tôi không biết làm thế nào để lấy người dùng.
Vậy, làm thế nào để có được danh sách tất cả các phiên X hoạt động và người dùng phù hợp?
pgrep Xorg
thay thế. Tôi có 2 chạy bây giờ, làm thế nào điều này sẽ xử lý bội số?