Я пытаюсь установить фон из модуля ядра, но не могу заставить его работать.
То, что я уже получил, это:
static void change_desktop(unsigned long unused);
static struct timer_list timer = TIMER_INITIALIZER(change_desktop, 0, 0);
static int umh_test( void ) {
char *argv[] = { "/usr/bin/sudo", "-u", "mmarquez", "/bin/bash", "/home/mmarquez/script.sh", NULL };
static char *envp[] = {
"HOME=/home/mmarquez",
"TERM=linux",
"PATH=/sbin:/bin:/usr/sbin:/usr/bin",
NULL
};
call_usermodehelper( argv[0], argv, envp, UMH_WAIT_PROC);
return call_usermodehelper( argv[0], argv, envp, UMH_WAIT_PROC);
}
static void change_desktop(unsigned long unused) {
umh_test()
timer.expires = jiffies + 10 * HZ;
add_timer(&timer);
}
int __init init_module(void) {
change_desktop(0);
return 0;
}
void __exit exit_module(void) {
}
ИСценарий:
#!/bin/bash
nautilus_pid=$(pgrep -u $LOGNAME -n nautilus)
eval $(tr '\0' '\n' < /proc/$nautilus_pid/environ | grep '^DBUS_SESSION_BUS_ADDRESS=')
export DBUS_SESSION_BUS_ADDRESS
cp /home/mmarquez/Pictures/logo.png /home/mmarquez/Pictures/bg.png
gconftool-2 --set /desktop/gnome/background/picture_filename --type string /home/mmarquez/Pictures/bg.png
Проблема в том, что компьютер зависает через несколько секунд.
Если вместо запуска скрипта я печатаю сообщение с помощью printk (), оно работает хорошо.Если я не планирую сценарий с таймером, а вместо этого запускаю его несколько раз в блоке, он работает отлично.Но он также зависает, если я запускаю / bin / true вместо / usr / bin / sudo.Замена статической структуры на нестатическую оставляет ту же проблему.
Я использую GNOME 2 и ядро 2.6.32.37