我想知道是否有人登录了本地 X-session。过去我查看了 ck-list-sessions 的输出。输出如下所示:
Session12:
unix-user = '[redacted]'
realname = '[redacted]'
seat = 'Seat1'
session-type = ''
active = TRUE
x11-display = ':0'
x11-display-device = '/dev/tty8'
display-device = ''
remote-host-name = ''
is-local = TRUE
on-since = '2012-10-22T18:17:55.553236Z'
login-session-id = '4294967295'
如果没有人登录,则没有输出。我检查了是否有人使用
ck_result" string => execresult("/usr/bin/ck-list-sessions | /bin/grep x11 | /usr/bin/cut --delimiter=\\' -f 2 | /usr/bin/wc -w
这不再起作用,因为 lightdm 欢迎程序看起来像一个登录用户
Session12:
unix-user = '[redacted]'
realname = 'Light Display Manager'
seat = 'Seat1'
session-type = 'LoginWindow'
active = TRUE
x11-display = ':0'
x11-display-device = '/dev/tty8'
display-device = ''
remote-host-name = ''
is-local = TRUE
on-since = '2012-10-22T22:17:55.553236Z'
login-session-id = '4294967295'
我想我可以检查 session-type,但我不知道如何做到这一点,也不知道如何用一行代码检查 x11-display。然后我需要编写自己的脚本,但那时我想检查一下是否有其他人已经完成了这项工作,或者是否有办法让 ConsoleKit 告诉我我想要什么(或者我是否应该使用其他工具)?
答案1
查看答案这个问题。您最终可能会使用 D-Bus 和 ConsoleKit。
答案2
事实上,我只需要解决这个问题 - 但我所能做的最好的就是“恶意黑客”式的代码:
dbus-send --system --type=method_call --print-reply=literal --dest=org.freedesktop.ConsoleKit `dbus-send --system --type=method_call --print-reply=literal --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Seat1 org.freedesktop.ConsoleKit.Seat.GetActiveSession` org.freedesktop.ConsoleKit.Session.GetX11Display | grep ":" && dbus-send --system --type=method_call --print-reply=literal --dest=org.freedesktop.ConsoleKit `dbus-send --system --type=method_call --print-reply=literal --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Seat1 org.freedesktop.ConsoleKit.Seat.GetActiveSession` org.freedesktop.ConsoleKit.Session.GetUnixUser | grep -v "uint32 122$" && echo "Active User"
我相信 lightdm 的 uid 在 Ubuntu 安装中是一致的,但这需要针对其他显示管理器进行调整。
代码检查:
- 当前实际座位有 X 显示屏吗?
- 如果是,那么它的 uid 是否与 122 (lightdm) 匹配?
- 您最终会得到 X 显示器、用户 uid 的输出,并且可以执行任意成功代码脚本
echo "Active User"
。