吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 945|回复: 25
收起左侧

[学习记录] Linux获取当前登录的用户

  [复制链接]
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函数是没有效果的。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xintiandi 发表于 2024-2-29 22:28
纯支持一下,也准备学习linux
nulla2011 发表于 2024-2-29 22:30
 楼主| licks 发表于 2024-2-29 22:32
 楼主| licks 发表于 2024-2-29 22:32
nulla2011 发表于 2024-2-29 22:30
支持一下,学习了

感谢感谢
starcloud105 发表于 2024-2-29 22:47
可以,有空学习一下
jk46jk57 发表于 2024-3-1 00:10
还记得以前拿着U盘帮老师解锁电脑锁屏密码,一看是友帮兔就傻眼了
chunyangnet 发表于 2024-3-1 00:20
可以考虑全面
ltgb 发表于 2024-3-1 06:31
jk46jk57 发表于 2024-3-1 00:10
还记得以前拿着U盘帮老师解锁电脑锁屏密码,一看是友帮兔就傻眼了

友帮兔?
shuigang302 发表于 2024-3-1 07:20
支持一下,学习
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 20:13

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表