プログラムで 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になる必要がある場合です。代わりに、root ユーザーで C プログラムと perl スクリプトを実行しているため、GUI を介してログインしているユーザーに関係なく、perl スクリプトによって現在のユーザーとして root が与えられます。
CプログラムがGUIを介してログインしている現在のユーザーを知ることができるメカニズムを教えてください。どんな助けでも大歓迎です。