2015-01-25 1 views
0

Каждый,Вызов Xterm подсказки через call_usermodehelper

Я стараюсь ссылаться Xterm с корневой привилегией из модуля ядра Linux, вызывая функцию call_usermodehelper. Мой код выглядит следующим образом:

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

Он успешно не осуществляется; возвращаемое значение, которое вы видите, указывает на ошибку. – mauzel

ответ

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); 
+0

Спасибо. Кажется, все еще не работает. Возвращаемое значение равно 256, а «ps -ef | grep xterm» ничего не показывает. Какие-либо предложения? – rellpdx

0

Вероятная причина в том, что переменная DISPLAY среды (наряду с некоторыми другими) отбрасывается, когда вы sudo'd к корню. Чтобы обойти это, вы должны либо установить переменную, либо передать параметр -display в командной строке.

Вам также может потребоваться изменить настройки с помощью xhost (хотя обычный совет, похоже, просто открывает его до всего, что не очень хорошо).

Для соответствующего обсуждения:

и документация: