好友
阅读权限10
听众
最后登录1970-1-1
|
licks
发表于 2024-2-29 22:20
我们知道Linux发行版系统,都是多用户系统,可以登录不同的用户,登录的同时,另外的登录用户是没有退出的。
在我们开发了图形用户界面的应用程序时,如何精准的获取当前登录的用户呢?
who命令?可不行,如果在终端切换到root用户,那么执行who显示的就是root用户。
whoami命令?这个可以,但是必须以当前的普通用户程序进行查询,如果开发一个系统级别的服务程序,也就是使用root启动的程序,那么这个命令就起不到作用了。
怎么办呢?
使用Linux发行版系统的DBus服务(DBus相关知识,请Bing自行了解[微笑])。
执行如下shell脚本,即可获取当前登录的用户,即使使用了root权限的后台服务程序:
pos@pos:~$ dbus-send --system --dest=org.freedesktop.login1 --type=method_call --print-reply /org/freedesktop/login1/user/self org.freedesktop.DBus.Properties.Get string:"org.freedesktop.login1.User" string:"Name"method return time=1709216091.604703 sender=:1.8 -> destination=:1.156 serial=233 reply_serial=2 variant string "pos"pos@pos:~$
上面的红色内容,就是命令“dbus-send --system --dest=org.freedesktop.login1 --type=method_call --print-reply /org/freedesktop/login1/user/self org.freedesktop.DBus.Properties.Get string:"org.freedesktop.login1.User" string:"Name"”的输出内容,其中pos就是当前用户名。
但是,需要注意的是,上面的shell命令,如果是通过popen函数调用获取,那么调用poen的程序,不可以是通过fork创建的子进程调用。fork出来的子进程,没有终端会话信息,此时,调用popen函数是没有效果的。 |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|