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

[How-To] Browse the bash history with a game controller

Scheduled Pinned Locked Moved Help and Support
bashterminalconsolehistoryhow-to
11 Posts 3 Posters 1.6k 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.
  • C
    Clyde
    last edited by Clyde 17 Sept 2018, 12:37

    Hi folks,

    edit: Dirty hack deleted that broke controller support in other menus. Read the next post from @meleu for a clean and working solution. 😊

    Cheers
    Clyde

    M C 2 Replies Last reply 17 Sept 2018, 17:13 Reply Quote 0
    • M
      meleu @Clyde
      last edited by meleu 17 Sept 2018, 17:13

      @clyde I may be wrong, but I think the way you're doing can possibly bring some problems like not launching joy2key.py properly in later instances of retropie_setup.sh (or any other joy2key client).

      My untested suggestion

      Add this to your .bashrc (not your .profile):

      export scriptdir="$HOME/RetroPie-Setup"
      source "$HOME/RetroPie-Setup/scriptmodules/helpers.sh"
      joy2keyStart

      And add this to your .bash_logout (create the file if it doesn't exist):

      joy2keyStop
      

      Explaining

      No parameters to joy2keyStart will use the default ones:
      /dev/input/jsX kcub1 kcuf1 kcuu1 kcud1 0x0a 0x20.

      Advantage/difference from your approach:

      • jsX: means every connected controller (not only js0 or js4, for example)
      • 0x20 (the last argument) means <space>, and your approach is using 0x9, meaning <tab>. I think it's not an issue for your goal, right?

      Also, adding joy2keyStop to your .bash_logout will stop joy2key.py when you log out from a subshell, making it "sensible" to new joysticks [dis]connections on later instances joy2key.py.

      • Useful topics
      • joystick-selection tool
      • rpie-art tool
      • achievements I made
      C 1 Reply Last reply 17 Sept 2018, 18:28 Reply Quote 3
      • C
        cyperghost @Clyde
        last edited by 17 Sept 2018, 18:16

        @clyde It is a real cool idea but this one has it's pitfalls. There are wonderfull commands. like history | tail -n50
        This hinders direct access to .bash_rc file ;)

        1 Reply Last reply Reply Quote 0
        • C
          Clyde @meleu
          last edited by 17 Sept 2018, 18:28

          First and foremost, thank you very much for your help.

          @meleu said in [How-To] Browse the bash history with a game controller:

          @clyde I may be wrong, but I think the way you're doing can possibly bring some problems like not launching joy2key.py properly in later instances of retropie_setup.sh (or any other joy2key client).

          Why is that? Just curious and willing to learn.

          Add this to your .bashrc (not your .profile):

          source "$HOME/RetroPie-Setup/scriptmodules/helpers.sh"
          joy2keyStart

          Alas, this doesn't work and gives me the error -bash: /scriptmodules/supplementary/runcommand/joy2key.py: no such file or directory.

          Advantage/difference from your approach:

          • jsX: means every connected controller (not only js0 or js4, for example)

          Ah, I wondered about the jsX and I thought this would only work from within a script.

          • 0x20 (the last argument) means <space>, and your approach is using 0x9, meaning <tab>. I think it's not an issue for your goal, right?

          Right, I just copied the line from runcommand.sh. 😇

          C C M 3 Replies Last reply 17 Sept 2018, 18:50 Reply Quote 0
          • C
            cyperghost @Clyde
            last edited by 17 Sept 2018, 18:50

            @clyde said in [How-To] Browse the bash history with a game controller:

            Why is that? Just curious and willing to learn.

            Try it yourself. Just start the command /opt/retropie/supplementary/runcommand/joy2key.py /dev/input/js0 kcub1 kcuf1 kcuu1 kcud1 0x0a 0x09 & twice and you see you will do two inputs at once.

            Start it three times, you will make three hops... and so on.

            1 Reply Last reply Reply Quote 0
            • C
              Clyde @Clyde
              last edited by Clyde 17 Sept 2018, 18:51

              @clyde said in [How-To] Browse the bash history with a game controller:

              @meleu said in [How-To] Browse the bash history with a game controller:

              @clyde I may be wrong, but I think the way you're doing can possibly bring some problems like not launching joy2key.py properly in later instances of retropie_setup.sh (or any other joy2key client).

              Why is that? Just curious and willing to learn.

              A test confirmed your concerns. With my approach, my controller doesn't work in retropie_setup.sh anymore. I watched the instances of joy2key in htop: One instance is created at boot, another one when I exit ES to the shell. Both remain even when I exit the shell back to ES. Subsequent visits to the shell don't increase the number of joy2key instances any further. Starting retropie_setup.sh from ES Retropie menu kills the second instance (judging by its pid), but the remaining instance don't work in the setup's menu. Just mentioned for your information.

              I still would like to know the why behind it, though. 😌

              edit:
              @cyperghost: My post collided with yours. I still wonder why multiple instances of joy2key can't coexist together, especially if they are mapped to the same keys. I just lack the knowledge about the internals of the Linux input system.

              C 1 Reply Last reply 17 Sept 2018, 19:09 Reply Quote 0
              • C
                cyperghost @Clyde
                last edited by 17 Sept 2018, 19:09

                @clyde They can coexists together but not if they use the same joystick number js{0...9}. But it is in general not a good programming style if you let called processes be in the wild. So you catch it's PID via $! routine

                1 Reply Last reply Reply Quote 1
                • C
                  cyperghost
                  last edited by cyperghost 17 Sept 2018, 19:23

                  @Clyde So see your attempt as first try we can to some evolution on the hop ;)

                  1. Try to call joy2key

                  call background processes and forget to terminate them

                  You see the results it can cause in your script

                  2. Try to call joy2key

                  call background process, and terminate it's process by nane - after there i no need of it. So you make your call with joy2key, and just use pkill -f joy2key

                  That's a shotgun, all processes which are called joy2key are terminated. Easy and works in most situations ;)

                  3. Try to call joy2key

                  call background process, catch it's process ID and terminate it - after there i no need of it. Catch it's PID with $! command and then kill this one PID

                  Much better isn't it? So you can avoid answer people do like .... your script causes this and that...

                  4. Try to call joy2key

                  function start_joy(){
                              "$ROOTDIR/supplementary/runcommand/joy2key.py" js0 kcub1 kcuf1 kcuu1 kcud1 0x0a 0x09 &
                              JOY2KEY_PID=$!
                  }
                  
                  function end_joy(){
                        if [[ -n "$JOY2KEY_PID" ]]; then
                          kill -INT JOY2KEY_PID
                      fi
                  
                  }
                  

                  So we have funtion calls, and catch PID but still have only one joystick in action... We can do that better?

                  5. Try to call joy2key

                  function start_joy(){
                  local joy_find; local i
                  joy_find=$(find /dev/input/js?)
                  for i in ${joy_find[@]}; do
                  "$ROOTDIR/supplementary/runcommand/joy2key.py" "$i" kcub1 kcuf1 kcuu1 kcud1 0x0a 0x09 &
                  JOY2KEY_PID+=("$!")
                  done
                  }
                  function end_joy(){
                  if [[ -n "$JOY2KEY_PID" ]]; then
                  kill -INT "${JOY2KEY_PID[@]}"
                  fi
                  }

                  Much better all instances of js{...} are called but we have multiple instances of joy2script running (but each sessions is assigned to only one joypad) but this works very good but is waste of resources .... but we are 80% done and understood how to call functions and how to create arrays in bash ;)

                  BTW: the use of find here is very unprofessional. You must take care of word splitting. So the answer if someone asks why you did you do that this way, the only smart anwer is: I know what I'm doing ;)

                  6. Try to get joy2key running

                  readonly JOY2KEY_SCRIPTLOC="$HOME/RetroPie-Setup/scriptmodules/helpers.sh"
                  readonly CONFIG=(kcub1 kcuf1 kcuu1 kcud1 0x0a kf10 0x20 kf9)
                  source "$JOY2KEY_SCRIPTLOC"
                  scriptdir="$HOME/RetroPie-Setup"
                  # We call the script with connected Joypads only, you can leave array CONFIG empty then you will use default...
                  joy2keyStart ${CONFIG[@]}
                  # Do here your actions
                  # ......
                  joy2keyStop # Terminate joy2key python script

                  That's the professional way and it's much easier to use in your code ;)

                  Enjoy ;)

                  1 Reply Last reply Reply Quote 1
                  • M
                    meleu @Clyde
                    last edited by 17 Sept 2018, 19:41

                    @clyde said in [How-To] Browse the bash history with a game controller:

                    First and foremost, thank you very much for your help.

                    @meleu said in [How-To] Browse the bash history with a game controller:

                    @clyde I may be wrong, but I think the way you're doing can possibly bring some problems like not launching joy2key.py properly in later instances of retropie_setup.sh (or any other joy2key client).

                    Why is that? Just curious and willing to learn.

                    because runcommand.sh and retropie_setup.sh always check if there's an instance of joy2key.py running before launching it.

                    Add this to your .bashrc (not your .profile):

                    source "$HOME/RetroPie-Setup/scriptmodules/helpers.sh"
                    joy2keyStart

                    Alas, this doesn't work and gives me the error -bash: /scriptmodules/supplementary/runcommand/joy2key.py: no such file or directory.

                    whoops! I missed a detail, the first line below.

                    export scriptdir="$HOME/RetroPie-Setup"
                    source "$HOME/RetroPie-Setup/scriptmodules/helpers.sh"
                    joy2keyStart

                    Edited my previous post accordingly.

                    • Useful topics
                    • joystick-selection tool
                    • rpie-art tool
                    • achievements I made
                    C 1 Reply Last reply 17 Sept 2018, 20:24 Reply Quote 1
                    • C
                      cyperghost
                      last edited by cyperghost 17 Sept 2018, 19:46

                      @meleu Yes the litte export ;)

                      1 Reply Last reply Reply Quote 0
                      • C
                        Clyde @meleu
                        last edited by 17 Sept 2018, 20:24

                        @meleu @cyperghost The export did the trick. It works now and doesn't break the other menu controls. 😄 Thank you for all the effort and explanations. I learned a lot today, as may others who stumble upon this thread, too.

                        I edited my opening post to a mere reference to @meleu's solution. 😌

                        1 Reply Last reply Reply Quote 0
                        11 out of 11
                        • First post
                          11/11
                          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.

                          This community forum collects and processes your personal information.
                          consent.not_received