我想在我的程序中捕获通过 GUI 登录的用户名。我的程序从 root 登录作为守护进程运行。如果非 root 用户通过 GUI 登录,我的程序应该会收到通知。我正在粘贴我当前的程序,该程序调用一个 perl 脚本,利用系统调用来检查谁是当前登录的用户。我也在粘贴我的 perl 脚本以供参考。
#include <X11/Xlib.h>
#include <X11/Xos.h>
#include <X11/Xfuncs.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h>
int main()
{
char *user;
char buf[1024];
int fd, ret;
fd = open("/tmp/log", O_TRUNC|O_RDWR|O_CREAT);
if (!fd) {
printf("Error opening file\n");
exit(1);
}
chmod("/tmp/log", S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP
| S_IROTH | S_IWOTH | S_IXOTH);
daemon(0, 0);
while (1) {
system("perl /home/curr-usr.pl");
sleep(5);
}
return 0;
}
用于获取当前用户登录的 perl 脚本。
#!/usr/bin/perl
my $result;
$result = `whoami`;
open FH, "+>>", "/tmp/log" or die $!;
print FH "$result ";
close (FH);
在上面的 c 程序中,我每 5 秒在一个 while 循环中调用 perl 脚本。perl 脚本使用命令“whoami”来让当前用户登录并将其转储到 /tmp/log 文件中。
我想要实现的是,如果 user1 登录 perl 脚本应该给我当前用户是 user1。相反,perl 脚本给了我作为当前用户的 root,而不管我通过 GUI 登录的用户是什么,因为我正在使用 root 用户运行 C 程序和 perl 脚本。
谁能告诉我C程序可以通过GUI了解当前用户登录的机制吗?任何帮助是极大的赞赏。