每个人,
我尝试通过调用函数call_usermodehelper
从Linux内核模块调用具有root权限的xterm。我的代码如下:
char* envp[] = {"HOME=/", NULL};
char* argv[] = {"/usr/bin/xterm", NULL};
int ret = call_usermodehelper(argv[0], argv, envp, UMH_WAIT_PROC);
printk(KERN_INFO "retval: %d\n", ret);
结果显示ret为256.我认为命令已成功执行。但是,我没有看到弹出的xterm窗口。
任何人都可以帮我解决这个问题吗?或者还有其他方式来实现我想要的东西吗?
答案 0 :(得分:0)
我相信你错过了一些必要的环境变量。试试这个:
char* envp[] = {"HOME=/", "PATH=/sbin:/bin:/usr/sbin:/usr/bin", NULL};
char* argv[] = {"/usr/bin/xterm", NULL};
int ret = call_usermodehelper(argv[0], argv, envp, UMH_WAIT_PROC);
printk(KERN_INFO "retval: %d\n", ret);
答案 1 :(得分:0)
可能的原因是,当你sudo到root时,DISPLAY
环境变量(以及其他一些)被删除。要解决此问题,您应该设置变量或在命令行上传递-display
选项。
您可能还需要使用xhost
修改设置(虽然通常的建议似乎只是将其打开到所有,这不好)。
相关讨论:
和文档: