Please do not post a support request without first reading and following the advice in https://retropie.org.uk/forum/topic/3/read-this-first

TriggerHappy Daemon (THD) doesn't work on my Pi running Retropie ! Help


  • It seems to be running but some of the line are in red, here they are :

    pam_unix(sudo:auth): auth could not identif
    pam_unix(sudo:auth): conversation failed
    pam_unix(sudo:auth): auth could not identif

    pam_unix(sudo:auth): auth could not identif
    pam_unix(sudo:auth): conversation failed
    pam_unix(sudo:auth): auth could not identif

    pam_unix(sudo:auth): auth could not identify password for [nobody]
    pam_unix(sudo:auth): conversation failed
    pam_unix(sudo:auth): auth could not identify password for [nobody]

  • Global Moderator

    @djon Well, it's clear why this fails: the service doesn't run as root AND the user used to run the service does not have sudo passwordless access. You can see the normal sudo disclaimer in the logs (We trust you have received the usual lecture from the local System..), which is shown whenever a user runs sudo and it must provide the password to run privileged commands. Since your service cannot provide the password, the sudo commands fail.

    Configure the service to run as rootor as the user pi, and you won't have any problems.


  • Well it looks promising thanks !
    How can i do it ?? ahah i'm kind of new in the Raspberry family :)

    Thanks again @mitu

  • Global Moderator

    @djon said in TriggerHappy Daemon (THD) doesn't work on my Pi running Retropie ! Help:

    Well it looks promising thanks !

    Luckily, this is configurable. Edit the /etc/default/triggerhappy file and uncomment (remove the # ) from the last line. Restart the service via sudo systemctl restart triggerhappy and it should run as root, so you don't need sudo for executing commands.

    You can also modify the last line and make it run as the pi user (which should be able to run sudo commands without a password prompt), I'd recommend doing that instead of leaving it running as root.


  • @mitu
    Some people say that i need to do
    "open the configuration file with
    sudo nano /etc/init.d/triggerhappy
    modify the configuration file line to look like the following
    DAEMON_ARGS="--daemon --triggers /etc/triggerhappy/triggers.d/ --socket /var/run/thd.socket --pidfile $PIDFILE --user pi /dev/input/event*" "

    previously it was : "
    DAEMON_ARGS="--daemon --triggers /etc/triggerhappy/triggers.d/ --socket /var/run/thd.socket --pidfile $PIDFILE --user nobody /dev/input/event*"

    But i did it previsouly before asking for help on this forum so i guess i'm missing something !


  • I already tried it in the past, but i'll try it again now
    let's see


  • The new status, seems to be working on paper @mitu :
    sudo systemctl status triggerhappy

    ● triggerhappy.service - triggerhappy global hotkey daemon

    Loaded: loaded (/lib/systemd/system/triggerhappy.service; enabled; vendor pre

    Active: active (running) since Wed 2018-06-13 02:55:23 UTC; 1min 33s ago

    Main PID: 752 (thd)

    CGroup: /system.slice/triggerhappy.service

           └─752 /usr/sbin/thd --triggers /etc/triggerhappy/triggers.d/ --socket
    

    Jun 13 02:55:23 retropie systemd[1]: Starting triggerhappy global hotkey daemon.

    Jun 13 02:55:23 retropie thd[752]: Unable to parse trigger line:

    Jun 13 02:55:23 retropie thd[752]: Found socket passed from systemd

    Jun 13 02:55:23 retropie systemd[1]: Started triggerhappy global hotkey daemon.

    lines 1-11/11 (END)...skipping...

    ● triggerhappy.service - triggerhappy global hotkey daemon

    Loaded: loaded (/lib/systemd/system/triggerhappy.service; enabled; vendor pre

    Active: active (running) since Wed 2018-06-13 02:55:23 UTC; 1min 33s ago

    Main PID: 752 (thd)

    CGroup: /system.slice/triggerhappy.service

           └─752 /usr/sbin/thd --triggers /etc/triggerhappy/triggers.d/ --socket
    

    Jun 13 02:55:23 retropie systemd[1]: Starting triggerhappy global hotkey daemon.

    Jun 13 02:55:23 retropie thd[752]: Unable to parse trigger line:

    Jun 13 02:55:23 retropie thd[752]: Found socket passed from systemd

    Jun 13 02:55:23 retropie systemd[1]: Started triggerhappy global hotkey daemon.

    ~

    ~

    ~

    ~

    ~

    ~

    ~

    ~

    ~

    ~

    ~

    ~

    ~

    lines 1-11/11 (END)...skipping...

    ● triggerhappy.service - triggerhappy global hotkey daemon

    Loaded: loaded (/lib/systemd/system/triggerhappy.service; enabled; vendor preset: enabled)

    Active: active (running) since Wed 2018-06-13 02:55:23 UTC; 1min 33s ago

    Main PID: 752 (thd)

    CGroup: /system.slice/triggerhappy.service

           └─752 /usr/sbin/thd --triggers /etc/triggerhappy/triggers.d/ --socket /run/thd.socket --user nobody --deviceglob /dev/input/event*
    

    Jun 13 02:55:23 retropie systemd[1]: Starting triggerhappy global hotkey daemon...

    Jun 13 02:55:23 retropie thd[752]: Unable to parse trigger line:

    Jun 13 02:55:23 retropie thd[752]: Found socket passed from systemd

    Jun 13 02:55:23 retropie systemd[1]: Started triggerhappy global hotkey daemon.


  • Now that TriggerHappy seems to be "running well", i think we're close to make it work !
    Poorly, when i press the button, nothing seems to be happening...
    @mitu


  • FYI: i edited the line as follow: " DAEMON_OPTS"--user pi"

  • Global Moderator

    No, it's still not working:

    • User running the service seems to be still nobody - probably the configuration file I mentioned works only for the old style service file
    • You get an error in the configuration file, which means it's running but ignoring your config.

    I think your best bet is to disable the service and run it as the pi user from the autostart.sh file (where Emulationstation is started).
    Run it from the terminal, as the pi user with

    /usr/sbin/thd --triggers /etc/triggerhappy/triggers.d/ --deviceglob /dev/input/event*
    

    Make sure it works like this - i.e. it gets your button inputs correctly. Then, add the line in either /etc/rc.local or in the autostart.sh script. Make sure you add an & at the end of the command when adding it to either file.


  • Waaa we're so close now !!
    So when i type
    "/usr/sbin/thd --triggers /etc/triggerhappy/triggers.d/ --deviceglob /dev/input/event*" from the terminal and press my button, it actually works !

    Now i'm not sure when to add the line, should i do "sudo nano /etc/rc.local" and go at the end and copy and paste ?

    FYI, when i type "sudo nano autostart.sh" the file is empty
    @mitu

  • Global Moderator

    @djon The autostart.sh file is in /opt/retropie/configs/all/autostart.sh, but try with /etc/rc.local first. You'll need to reboot to test it.


  • @mitu
    if the line need to start at boot, i also have a python code running at boot, i added the pyton path at the end of /etc/profile
    Don't know if it can help here :)


  • @mitu
    So i did : sudo nano /etc/rc.local
    And added at the end of the file
    "/usr/sbin/thd --triggers /etc/triggerhappy/triggers.d/ --deviceglob /dev/input/event* &"
    Then sudo reboot

    But it still not working


  • Maybe should i past it before "exit 0" line ?

  • Global Moderator

    @djon Does the process shows up when your run ps -ef from the terminal ?
    EDIT: Yes, of course you need to add it before the exit, otherwise it's not executed.


  • Ok so i add it before "exit 0" this time and run ps -ef @mitu
    And i think the line you're interested in is
    "nobody 364 1 0 03:26 ? 00:00:00 /usr/sbin/thd --triggers /etc/triggerhappy/triggers.d/ --socket /run/thd.socket --user nobody --deviceglob /dev/input/event*"

  • Global Moderator

    @djon Doesn't seem to be correct. Have you disabled the service ? The process shown there seems the one started from the built-in service script. Post your rc.local file contents, surrounded by code tags (```).


  • No prob ! @mitu

    
    #
    
    # rc.local
    
    #
    
    # This script is executed at the end of each multiuser runlevel.
    
    # Make sure that the script will "exit 0" on success or any other
    
    # value on error.
    
    #
    
    # In order to enable or disable this script just change the execution
    
    # bits.
    
    #
    
    # By default this script does nothing.
    
    
    
    # Print the IP address
    
    _IP=$(hostname -I) || true
    
    if [ "$_IP" ]; then
    
      printf "My IP address is %s\n" "$_IP"
    
    fi
    
    
    
    /usr/sbin/thd --triggers /etc/triggerhappy/triggers.d/ --devicelob /dev/input/event* &
    
    
    
    exit 0
  • Global Moderator

    @djon Just change it to

    # Start THD as user pi
    nohup /usr/sbin/thd --triggers /etc/triggerhappy/triggers.d/ --user pi --deviceglob /dev/input/event* &
    
    exit 0
    

    and reboot. Disable the service with sudo systemctl disable triggerhappy first.

Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.

Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.