RetroPie forum home
    • Recent
    • Tags
    • Popular
    • Home
    • Docs
    • Register
    • Login
    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

    Weird Controller Problems (yes, again)

    Scheduled Pinned Locked Moved Help and Support
    controllersxbox360nesraphnet
    53 Posts 5 Posters 17.9k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • hansolo77H
      hansolo77 @meleu
      last edited by

      @meleu said in Weird Controller Problems (yes, again):

      @hansolo77
      The __joy2key_dev is used only by the scripts which call joy2key.py. If you are curious, here are links to the exact line in each file:

      • runcommand.sh
      • helpers.sh (used by retropie_setup.sh)
      • jsfuncs.sh (used by RetroPie-joystick-selection tool)

      I'm away from my raspi now, but I'll try to find a solution when I get home. And the first thing I'll try is to put that export line at the end of /etc/profile. :-)

      Thanks @meleu I'll be waiting for your solution. :) Looks like a couple of guys hijacked my thread though lol.

      Who's Scruffy Looking?

      edmaul69E mediamogulM 2 Replies Last reply Reply Quote 1
      • mediamogulM
        mediamogul Global Moderator @edmaul69
        last edited by mediamogul

        @edmaul69 said in Weird Controller Problems (yes, again):

        The keyboard overrides the other two as the first joystick (even though it has no joystick functionality)

        I actually believe you can fix that with a udev rule, but I may be mistaken.

        RetroPie v4.5 • RPi3 Model B • 5.1V 2.5A PSU • 16GB SanDisk microSD • 512GB External Drive

        1 Reply Last reply Reply Quote 0
        • edmaul69E
          edmaul69 @hansolo77
          last edited by

          @hansolo77 i apologize. I didnt mean to hijack it. We are both in the same situation and its possible the same northwest fix we both did caused this. I was hoping we both could get the answer we needed without trying to do it in two seperate threads. If meleu finds a way around it i am all for it. If you get it working please do share your steps and i will do the same if i get it working.

          1 Reply Last reply Reply Quote 1
          • mediamogulM
            mediamogul Global Moderator @hansolo77
            last edited by

            @hansolo77 said in Weird Controller Problems (yes, again):

            Looks like a couple of guys hijacked my thread though

            I'm sorry I took the money!

            RetroPie v4.5 • RPi3 Model B • 5.1V 2.5A PSU • 16GB SanDisk microSD • 512GB External Drive

            1 Reply Last reply Reply Quote 0
            • hansolo77H
              hansolo77
              last edited by

              LOL I was just kidding. No worries. We're all in this thing together. I'm spending my time soldering a blue LED to my NES, and learning about resistors because I want to have it wired on the GPIO rather than the Mausberry Circuit because the circuit cuts the LED before the system is fully off. Lots of good learning stuff. Have it working now. So my time is being well spent. :)

              I just wish I knew more about Linux and programming so I could figure this stuff out on my own without having to ask for somebody to just do it for me.

              Who's Scruffy Looking?

              edmaul69E 1 Reply Last reply Reply Quote 2
              • edmaul69E
                edmaul69 @hansolo77
                last edited by

                @hansolo77 yeah a 220ohm resistor is good. If your blue led is a clear plastic and not blue if you use some wet 2000 grit sandpaper you can dissapate the led so it doesnt blind you when you look at it. But a colored led will always look better.

                1 Reply Last reply Reply Quote 0
                • hansolo77H
                  hansolo77
                  last edited by

                  @meleu and Anybody Else...

                  Did you come up with anything I can try? This is still an unanswered issue. I'm game for anything (lol pun unintended). I tried to do some figuring out on my own.. these are some things I tried that didn't work:

                  • Change from " (double quotes) to ' (single quote) in the export command (I saw some scripts other people had written on other sites for other projects that said they had to be single quotes)
                  • Change the location of the export command to a totally different file (ie; crontrab by using @reboot, or a different autostart.sh file)

                  Something I've not tried to do is just manually edit those files you have listed that are calling on __joy2key_dev and just replace the input it's looking for from js0 and make it js2. That would probably be a harsh way to make it work but it probably would. The problem with that is if I ever get some kind of other controller issue, I might need to change them again. Changing 1 file is ideally easier than 3.

                  Is __joy2key_dev being implemented as a variable, or does this create a file somewhere that those other scripts are looking for? It looks like it's just creating a declaration for a variable. If that's the case, how do the other scripts find it? In my limited experience and examination of other scripts, variables are exclusive to the script it's running in. Is that what the export command does - make it a system-wide variable? I'm just trying to wrap my head around what's actually happening, in the hopes I'll be able to fix it on my own, or at least understand how the eventual fix actually works. :)

                  Who's Scruffy Looking?

                  meleuM 1 Reply Last reply Reply Quote 0
                  • meleuM
                    meleu @hansolo77
                    last edited by

                    @hansolo77 said in Weird Controller Problems (yes, again):

                    variables are exclusive to the script it's running in. Is that what the export command does - make it a system-wide variable?

                    Not exactly system-wide. The exportmakes every child shell of the current shell "inherit" the variable.

                    I made more tests and realized that problem is that when you sudo a script, it doesn't inherit that variable.

                    Setting the device in a file was what I tried with this non-merged PR but it would work runcommand.sh only (what I now agree that isn't the best approach).

                    I can use different controllers setting this variable when the scripts are not launched with sudo, but it doesn't solve your issue...

                    Unfortunately your issue remains unsolved... I'll keep trying.

                    • Useful topics
                    • joystick-selection tool
                    • rpie-art tool
                    • achievements I made
                    1 Reply Last reply Reply Quote 0
                    • hansolo77H
                      hansolo77
                      last edited by

                      At least it's a step in the right direction, and identified a possible cause as to why your original proposed fix didn't work. :) I'll keep my fingers crossed you'll figure something out.

                      Who's Scruffy Looking?

                      meleuM 1 Reply Last reply Reply Quote 0
                      • hansolo77H
                        hansolo77
                        last edited by

                        I had a thought.. is there a way to maybe incorporate the Joystick-Selection addon into this? Since it goes in and configures default controllers on a per-emulator basis, could you simply add another "emulator" option called "EmulationStation", that would essentially set a default controller for everything outside RetroArch? Or is this something more deep-rooted into the OS, that a simple script to alter configs wouldn't work?

                        Still hoping a solution is found.

                        Who's Scruffy Looking?

                        1 Reply Last reply Reply Quote 0
                        • meleuM
                          meleu @hansolo77
                          last edited by

                          @hansolo77 I've found a way to make the sudo environment inherit __joy2key_dev. You have to add the following line to your /etc/sudoers

                          Defaults	env_keep += "__joy2key_dev"
                          

                          After the Defaults string there is a <TAB>. Note that using the sudo visudo command is the recommended way to update /etc/sudoers content, since it protects against many failure modes.

                          My /etc/sudoers looks like this:

                          # This file MUST be edited with the 'visudo' command as root.
                          #
                          # Please consider adding local content in /etc/sudoers.d/ instead of
                          # directly modifying this file.
                          #
                          # See the man page for details on how to write a sudoers file.
                          #
                          Defaults	env_reset
                          Defaults	mail_badpass
                          Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
                          
                          # added to export __joy2key_dev to sudo environments
                          Defaults	env_keep += "__joy2key_dev"
                          
                          # Host alias specification
                          
                          # User alias specification
                          
                          # Cmnd alias specification
                          
                          # User privilege specification
                          root	ALL=(ALL:ALL) ALL
                          
                          # Allow members of group sudo to execute any command
                          %sudo	ALL=(ALL:ALL) ALL
                          
                          # See sudoers(5) for more information on "#include" directives:
                          
                          #includedir /etc/sudoers.d
                          

                          @hansolo77 said in Weird Controller Problems (yes, again):

                          is there a way to maybe incorporate the Joystick-Selection addon into this?

                          Well, I was thinking on implement such functionality, but the main dev said that will do some more work on this subject, then I prefer to leave it to him.

                          • Useful topics
                          • joystick-selection tool
                          • rpie-art tool
                          • achievements I made
                          1 Reply Last reply Reply Quote 0
                          • hansolo77H
                            hansolo77
                            last edited by

                            Awesome work. I will give this a try later today (after Thanksgiving lunch is over and company has started leaving). I'm excited to find out if this is the fix I needed. So just to make sure, I still need to make sure I have the export __joy2key_dev="/dev/input/js2" inside the autostart.sh file correct?

                            Who's Scruffy Looking?

                            1 Reply Last reply Reply Quote 0
                            • hansolo77H
                              hansolo77
                              last edited by hansolo77

                              Ok new problem.

                              First of all, it didn't fix it. I tried to load up a game and pressed as many buttons as I could on the run-command window with my xbox controller, and nothing happened. I rebooted and checked to make sure, and YES, I have the export command in the autostart script, and the /etc/sudoers file looks like yours. I even added the # comments, and made sure it was a <TAB> between Defaults and env_keep.

                              The new problem is that now the NES controller doesn't trigger anything in the run-command now either. I further tested this with just the NES controller connected and the Xbox dongle disconnected, and it still doesn't work. Both controllers will work fine on their own as far as navigating inside ES, and playing games, but none of the joy2key functionality works.

                              Who's Scruffy Looking?

                              1 Reply Last reply Reply Quote 0
                              • hansolo77H
                                hansolo77
                                last edited by

                                So I played around with this some. I think the problem I'm having is related to the fact that the __joy2key_dev variable isn't created until right before ES starts. So when ES's autostart script finally creates the variable, the system environment still doesn't know that that should be stored in the /etc/sudoers path. I managed to get everything back to normal (launching the run-command setup menus with a keypress on the Xbox controller and no NES connected) by # commenting out the entire export __joy2key_dev="/dev/input/js2" line from the autostart.sh file and removing the added line to the /etc/sudoers file.

                                I was just about to test re-adding the line to the /etc/sudoers file and leaving the autostart.sh unmodified (with the # comment still in), but now my system is fucked up. Don't know what happened, but I got a lot of text errors on my HDMI output. I unplugged the power, reconnected, and now all I have is the rainbow splash screen. So I might have just borked my whole system by trying to fix this. I've been doing nothing but SSH'ing into the Pi, and rebooting using sudo reboot, so I don't know what happened. :(

                                I hate my life.

                                Who's Scruffy Looking?

                                meleuM 1 Reply Last reply Reply Quote 0
                                • meleuM
                                  meleu @hansolo77
                                  last edited by

                                  @hansolo77 WTF?! Calm down bro! I think that your current problem is unrelated with the __joy2key_dev we are messing...

                                  Sorry for giving incomplete instructions. I achieved what you are wanting to do here, using the following method:

                                  1. add __joy2key_dev="/dev/input/jsX" to the file /etc/environment. Obviously you need to replace jsX with the joystick you want to use.
                                  2. add Defaults env_keep += "__joy2key_dev" to the file /etc/sudoers (using sudo visudo is the best way to edit this file).
                                  3. reboot.

                                  Keep in mind the following:

                                  • It is a "hardcoded" workaround, if you unplug or plug new controllers to the system, their respective jsX file may change. And it can bring confusion.
                                  • the scripts that use joy2key.py make it convert the 0 button into an <enter> keystroke, and the 1 button into a <tab> keystroke. But these buttons differs from joystick to joystick (model, manufacturer, etc.).
                                  • if the file you specified in your custom __joy2key_dev doesn't exist, the scripts won't get another one. (this can be improved with simple changes).

                                  I hope you solve it and love your life again.

                                  • Useful topics
                                  • joystick-selection tool
                                  • rpie-art tool
                                  • achievements I made
                                  hansolo77H 1 Reply Last reply Reply Quote 0
                                  • hansolo77H
                                    hansolo77
                                    last edited by

                                    Ok, there was apparently some major file corruptions. Not sure how it happened. When I took the SD card out and plugged it into my Windows Machine (so I could write a backed up image to the card) it prompted for Windows to attempt to repair. I let it, and it came back with THOUSANDS of files it tried to fix but just truncated. Needless to say, Windows failed to fix it. So I ended up just rewriting the backup image to the card, and I'm back to where I was. The only thing I had that I now don't was the scraped metadata I had stored on the SD card, so that's no biggie.

                                    I tried what I was doing before the issue with the corruption happened. I still can't get it to work. Commenting out the export command in the autostart didn't fix anything with the sudoer's file. I still think the problem stems from not having the variable declared until right before ES starts, which in turn means the setting of the Default variable in sudoers won't do anything.

                                    Who's Scruffy Looking?

                                    1 Reply Last reply Reply Quote 0
                                    • hansolo77H
                                      hansolo77 @meleu
                                      last edited by hansolo77

                                      @meleu Aha, so I was on the right track! I needed to specify the variable __joy2key_dev somewhere. Just not in that autostart.sh file. I knew I was on to something. Like I said, I don't know enough about how Linux works to even know there was a /etc/evironment file lol.


                                      is the /etc/environment file supposed to be empty before I add my extra line? It looks like it is, I just want to make sure I'm editing the correct file.

                                      Who's Scruffy Looking?

                                      meleuM 1 Reply Last reply Reply Quote 0
                                      • meleuM
                                        meleu @hansolo77
                                        last edited by

                                        @hansolo77 said in Weird Controller Problems (yes, again):

                                        is the /etc/environment file supposed to be empty before I add my extra line? It looks like it is, I just want to make sure I'm editing the correct file.

                                        Yeah! My /etc/environmenthere were empty before this change.

                                        • Useful topics
                                        • joystick-selection tool
                                        • rpie-art tool
                                        • achievements I made
                                        1 Reply Last reply Reply Quote 0
                                        • meleuM
                                          meleu
                                          last edited by meleu

                                          @hansolo77 please, wait a little before going on this trick. I noticed that it doesn't work after some changes that runcommand got recently. I've already reported here.

                                          • Useful topics
                                          • joystick-selection tool
                                          • rpie-art tool
                                          • achievements I made
                                          hansolo77H 1 Reply Last reply Reply Quote 0
                                          • hansolo77H
                                            hansolo77
                                            last edited by

                                            It's still not working. I don't know what's going on. Here's everything I did:

                                            Connect the NES controller adapter to USB, Connect Xbox dongle to USB
                                            sudo visudo
                                            Added a 4th Defaults line (with a tab in beween): Defaults env_keep += "__joy2key_dev"
                                            CTRL+X -> Y -> ENTER (saves file as /etc/sudoers.tmp)
                                            sudo nano /etc/environment
                                            Added a new line: __joy2key_dev="/dev/input/js2"
                                            CTRL+X -> Y -> ENTER (saves file as **/etc/environment)
                                            sudo reboot
                                            (wait for system to load up ES)
                                            Select Atari 2600 (first system on line)
                                            Select 3D TicTacToe (first game)
                                            Run-Command displays, I press ALL BUTTONS on the Xbox controller, nothing happens
                                            Game Starts

                                            Also doing all this, with js0 and having the NES adapter does nothing.

                                            The only way I can get it to detect key presses on Run-Command is to have everything # commented out on those 2 files, and have the NES adapter unplugged. Without having them # commented out, while having the NES adapter unplugged does nothing. So clearly it's doing SOMETHING. Maybe Run-Command isn't right?

                                            • Both controller adapters connected to USB = Only NES Works
                                            • NES adapter connected, Xbox not = NES Works
                                            • Xbox adapter connected, NES not = Xbox Works
                                            • Modified variable entries, both controllers connected = Nothing Works
                                            • Modified variable entries, NES connected, Xbox Not = Nothing Works
                                            • Modified variable entries, Xbox connected, NES Not = Nothing Works

                                            So the key presses just plain don't work when adding the new variable lines. Without them, they work fine by themselves, or only the NES one works when both connected.

                                            Who's Scruffy Looking?

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            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.