我試圖從內核模塊設置背景,但我無法使它工作。從內核模塊更改gnome背景
我已經得到的是:
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
你爲什麼使用內核模塊來做到這一點? – Dave 2012-01-14 04:57:40
不要這樣做。因爲內核可以運行而不需要任何桌面運行。如果絕對必要,請更改桌面啓動腳本以查詢有關您的模塊的內核,然後更改背景。 – 2012-01-14 08:10:05
@Dave這是一個同事的惡作劇。讓我們說這是一個詳細的。 – Juan 2012-01-15 08:31:47