This is a Linux kernel programming question.

I am trying to spawn a process from a kernel module, that has visual output - for now, I'm just trying to spawn xeyes. I am trying to do this using call_usermodehelper. I am getting a return value of 256.

I am specifying these environmental variables in envp:
  • HOME=/
  • DISPLAY=:0 (this is what I get when I echo $DISPLAY in any of my terminals)
  • PATH=/sbin:/bin:/usr/sbin:/usr/bin

Here is my module code:

Code:
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>

int spawnProcess(void) {

    char *argv[] = { "/usr/bin/xeyes", NULL };
    static char *envp[] = { "HOME=/","DISPLAY=:0", "PATH=/sbin:/bin:/usr/sbin:/usr/bin", NULL };

    printk(KERN_DEBUG "Inside spawnProcess\n");

    return call_usermodehelper( argv[0], argv, envp, UMH_WAIT_PROC );
}

static int __init moduleLoader(void) {
    int i;
    printk(KERN_INFO "My module is loading...\n");
    i = spawnProcess();
    printk(KERN_DEBUG "return value %d\n",i);
    printk(KERN_INFO "My module is done loading.\n");
    return 0;
}

static void __exit moduleUnloader(void) {
    printk(KERN_INFO "My module was unloaded.\n");
    return;
}

module_init(moduleLoader);
module_exit(moduleUnloader);

MODULE_AUTHOR("Yaron Shragai");
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Lorem ipsum dolor sit amet");
Here is the output in the system log:

Mar 29 17:38:16 yaron-VirtualBox kernel: [84070.533179] My module is loading...
Mar 29 17:38:16 yaron-VirtualBox kernel: [84070.533180] Inside spawnProcess
Mar 29 17:38:16 yaron-VirtualBox kernel: [84070.534297] return value 256
Mar 29 17:38:16 yaron-VirtualBox kernel: [84070.534299] My module is done loading.


I have been able to successfully spawn a process that does not generate display output (namely, /usr/bin/logger), as per the example here: https://www.ibm.com/developerworks/l...er-space-apps/

I am running 64-bit Ubuntu 16.04 LTS on a VirtualBox VM.
Output from uname -a:
Linux yaron-VirtualBox 4.4.0-57-generic #78-Ubuntu SMP Fri Dec 9 23:50:32 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

Thanks for any help!