通过call_usermodehelper调用xterm提示符

时间:2015-01-25 22:18:37

标签: linux kernel xterm

每个人,

我尝试通过调用函数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窗口。

任何人都可以帮我解决这个问题吗?或者还有其他方式来实现我想要的东西吗?

2 个答案:

答案 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修改设置(虽然通常的建议似乎只是将其打开到所有,这不好)。

相关讨论:

和文档: