当 lightdm 运行时,我应该如何确定用户是否以图形方式登录?

当 lightdm 运行时,我应该如何确定用户是否以图形方式登录?

我想知道是否有人登录了本地 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 安装中是一致的,但这需要针对其他显示管理器进行调整。

代码检查:

  1. 当前实际座位有 X 显示屏吗?
  2. 如果是,那么它的 uid 是否与 122 (lightdm) 匹配?
  3. 您最终会得到 X 显示器、用户 uid 的输出,并且可以执行任意成功代码脚本echo "Active User"

相关内容