Can't find the right command.

51 views
Skip to first unread message

Hamm Mann

unread,
Jun 14, 2025, 10:01:40 AMJun 14
to psmove
Hello. I've set up psmoveapi on Arch Linux and reached the step where i have to pair the controllers. The issue is, every single combination of ./psmove pair gives me either a missing directory or a missing command. There aren't any guides online telling me how i should structure this outside of the doccumentation page, so what am i doing wrong?

Bastiaan van den Berg

unread,
Jun 14, 2025, 10:02:42 AMJun 14
to psm...@googlegroups.com
why not try 'strace' to see whats missing

On Sat, Jun 14, 2025 at 4:01 PM Hamm Mann <connor...@gmail.com> wrote:
Hello. I've set up psmoveapi on Arch Linux and reached the step where i have to pair the controllers. The issue is, every single combination of ./psmove pair gives me either a missing directory or a missing command. There aren't any guides online telling me how i should structure this outside of the doccumentation page, so what am i doing wrong?

--
You received this message because you are subscribed to the Google Groups "psmove" group.
To unsubscribe from this group and stop receiving emails from it, send an email to psmove+un...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/psmove/eb16c087-712e-49a6-b2ee-7290b507350fn%40googlegroups.com.

Hamm Mann

unread,
Jun 14, 2025, 10:06:13 AMJun 14
to psmove
Did not expect a reply that quick. Let me check.

Hamm Mann

unread,
Jun 14, 2025, 10:12:31 AMJun 14
to psmove
Didn't do anything initially, so i added -h as well. This is what I got.

(1)(deck@steamdeck psmoveapi)$ strace -h
Usage: strace [-ACdffhikqqrtttTvVwxxyyzZ] [-I N] [-b execve] [-e EXPR]...
             [-a COLUMN] [-o FILE] [-s STRSIZE] [-X FORMAT] [-O OVERHEAD]
             [-S SORTBY] [-P PATH]... [-p PID]... [-U COLUMNS] [--seccomp-bpf]
             { -p PID | [-DDD] [-E VAR=VAL]... [-u USERNAME] PROG [ARGS] }
  or: strace -c[dfwzZ] [-I N] [-b execve] [-e EXPR]... [-O OVERHEAD]
             [-S SORTBY] [-P PATH]... [-p PID]... [-U COLUMNS] [--seccomp-bpf]
             { -p PID | [-DDD] [-E VAR=VAL]... [-u USERNAME] PROG [ARGS] }

General:
 -e EXPR        a qualifying expression: OPTION=[!]all or OPTION=[!]VAL1[,VAL2]...
    options:    trace, abbrev, verbose, raw, signal, read, write, fault,
                inject, status, quiet, kvm, decode-fds

Startup:
 -E VAR=VAL, --env=VAR=VAL
                put VAR=VAL in the environment for command
 -E VAR, --env=VAR
                remove VAR from the environment for command
 -p PID, --attach=PID
                trace process with process id PID, may be repeated
 -u USERNAME, --user=USERNAME
                run command as USERNAME handling setuid and/or setgid
                USERNAME may be a user name or a UID:GID pair, where UID
                and GID are numbers. In the latter case, strace does not
                perform name lookups.
 --argv0=NAME   set PROG argv[0] to NAME

Tracing:
 -b execve, --detach-on=execve
                detach on execve syscall
 -D, --daemonize[=grandchild]
                run tracer process as a grandchild, not as a parent
 -DD, --daemonize=pgroup
                run tracer process in a separate process group
 -DDD, --daemonize=session
                run tracer process in a separate session
 -f, --follow-forks
                follow forks
 -ff, --follow-forks --output-separately
                follow forks with output into separate files
 -I INTERRUPTIBLE, --interruptible=INTERRUPTIBLE
    1, anywhere:   no signals are blocked
    2, waiting:    fatal signals are blocked while decoding syscall (default)
    3, never:      fatal signals are always blocked (default if '-o FILE PROG')
    4, never_tstp: fatal signals and SIGTSTP (^Z) are always blocked
                   (useful to make 'strace -o FILE PROG' not stop on ^Z)
 --kill-on-exit kill all tracees if strace is killed

Filtering:
 -e trace=[!][?]{{SYSCALL|GROUP|all|/REGEX}[@64|@32|@x32]|none},
  --trace=[!][?]{{SYSCALL|GROUP|all|/REGEX}[@64|@32|@x32]|none}
                trace only specified syscalls.
    groups:     %clock, %creds, %desc, %file, %fstat, %fstatfs %ipc, %lstat,
                %memory, %net, %process, %pure, %signal, %stat, %%stat,
                %statfs, %%statfs
 -e signal=SET, --signal=SET
                trace only the specified set of signals
                print only the signals from SET
 -e status=SET, --status=SET
                print only system calls with the return statuses in SET
    statuses:   successful, failed, unfinished, unavailable, detached
 -e trace-fds=SET, --trace-fds=SET
                trace operations on file descriptors from SET
 -P PATH, --trace-path=PATH
                trace accesses to PATH
 -z, --successful-only
                print only syscalls that returned without an error code
 -Z, --failed-only
                print only syscalls that returned with an error code

Output format:
 -a COLUMN, --columns=COLUMN
                alignment COLUMN for printing syscall results (default 40)
 -e abbrev=SET, --abbrev=SET
                abbreviate output for the syscalls in SET
 -e verbose=SET, --verbose=SET
                dereference structures for the syscall in SET
 -e raw=SET, --raw=SET
                print undecoded arguments for the syscalls in SET
 -e read=SET, --read=SET
                dump the data read from the file descriptors in SET
 -e write=SET, --write=SET
                dump the data written to the file descriptors in SET
 -e quiet=SET, --quiet=SET
                suppress various informational messages
    messages:   attach, exit, path-resolution, personality, thread-execve
 -e kvm=vcpu, --kvm=vcpu
                print exit reason of kvm vcpu
 -e decode-fds=SET, --decode-fds=SET
                what kinds of file descriptor information details to decode
    details:    dev (device major/minor for block/char device files),
                eventfd (associated eventfd object details for eventfds),
                path (file path),
                pidfd (associated PID for pidfds),
                socket (protocol-specific information for socket descriptors),
                signalfd (signal masks for signalfds)
 -i, --instruction-pointer
                print instruction pointer at time of syscall
 -k, --stack-trace[=symbol]
                obtain stack trace between each syscall
 --stack-trace-frame-limit=limit
                obtain no more than this amount of frames
                when backtracing a syscall (default 256)
 -n, --syscall-number
                print syscall number
 -o FILE, --output=FILE
                send trace output to FILE instead of stderr
 -A, --output-append-mode
                open the file provided in the -o option in append mode
 --output-separately
                output into separate files (by appending pid to file names)
 -q, --quiet=attach,personality
                suppress messages about attaching, detaching, etc.
 -qq, --quiet=attach,personality,exit
                suppress messages about process exit status as well.
 -qqq, --quiet=all
                suppress all suppressible messages.
 -r, --relative-timestamps[=PRECISION]
                print relative timestamp
    precision:  one of s, ms, us, ns; default is microseconds
 -s STRSIZE, --string-limit=STRSIZE
                limit length of print strings to STRSIZE chars (default 32)
 --absolute-timestamps=[[format:]FORMAT[,[precision:]PRECISION]]
                set the format of absolute timestamps
    format:     none, time, or unix; default is time
    precision:  one of s, ms, us, ns; default is seconds
 -t, --absolute-timestamps[=time]
                print absolute timestamp
 -tt, --absolute-timestamps=[time,]us
                print absolute timestamp with usecs
 -ttt, --absolute-timestamps=unix,us
                print absolute UNIX time with usecs
 -T, --syscall-times[=PRECISION]
                print time spent in each syscall
    precision:  one of s, ms, us, ns; default is microseconds
 -v, --no-abbrev
                verbose mode: print entities unabbreviated
 --strings-in-hex=non-ascii-chars
                use hex instead of octal in escape sequences
 -x, --strings-in-hex=non-ascii
                print non-ASCII strings in hex
 -xx, --strings-in-hex[=all]
                print all strings in hex
 -X FORMAT, --const-print-style=FORMAT
                set the FORMAT for printing of named constants and flags
    formats:    raw, abbrev, verbose
 -y, --decode-fds[=path]
                print paths associated with file descriptor arguments
 -yy, --decode-fds=all
                print all available information associated with file
                descriptors in addition to paths
 --decode-pids=pidns
                print PIDs in strace's namespace, too
 -Y, --decode-pids=comm
                print command names associated with PIDs
 --always-show-pid
                show PID prefix also for the process started by strace

Statistics:
 -c, --summary-only
                count time, calls, and errors for each syscall and report
                summary
 -C, --summary  like -c, but also print the regular output
 -O OVERHEAD[UNIT], --summary-syscall-overhead=OVERHEAD[UNIT]
                set overhead for tracing syscalls to OVERHEAD UNITs
    units:      one of s, ms, us, ns; default is microseconds
 -S SORTBY, --summary-sort-by=SORTBY
                sort syscall counts by: time, min-time, max-time, avg-time,
                calls, errors, name, nothing (default time)
 -U COLUMNS, --summary-columns=COLUMNS
                show specific columns in the summary report: comma-separated
                list of time-percent, total-time, min-time, max-time,  
                avg-time, calls, errors, name
                (default time-percent,total-time,avg-time,calls,errors,name)
 -w, --summary-wall-clock
                summarise syscall latency (default is system time)

Stop condition:
 --syscall-limit=LIMIT
                Detach all tracees after tracing LIMIT syscalls

Tampering:
 -e inject=SET[:error=ERRNO|:retval=VALUE][:signal=SIG][:syscall=SYSCALL]
           [:delay_enter=DELAY][:delay_exit=DELAY]
           [:poke_enter=@argN=DATAN,@argM=DATAM...]
           [:poke_exit=@argN=DATAN,@argM=DATAM...]
           [:when=WHEN],
 --inject=SET[:error=ERRNO|:retval=VALUE][:signal=SIG][:syscall=SYSCALL]
          [:delay_enter=DELAY][:delay_exit=DELAY]
          [:poke_enter=@argN=DATAN,@argM=DATAM...]
          [:poke_exit=@argN=DATAN,@argM=DATAM...]
          [:when=WHEN],
                perform syscall tampering for the syscalls in SET
    delay:      microseconds or NUMBER{s|ms|us|ns}
    when:       FIRST[..LAST][+[STEP]]
 -e fault=SET[:error=ERRNO][:when=WHEN], --fault=SET[:error=ERRNO][:when=WHEN]
                synonym for -e inject with default ERRNO set to ENOSYS.

Miscellaneous:
 -d, --debug    enable debug output to stderr
 -h, --help     print help message
 --seccomp-bpf  enable seccomp-bpf filtering
 --tips[=[[id:]ID][,[format:]FORMAT]]
                show strace tips, tricks, and tweaks on exit
    id:         non-negative integer or random; default is random
    format:     none, compact, full; default is compact
 -V, --version  print version
(deck@steamdeck psmoveapi)$
Anything of note?

Bastiaan van den Berg

unread,
Jun 14, 2025, 10:13:35 AMJun 14
to psm...@googlegroups.com
try strace ./psmoveapi pair


Hamm Mann

unread,
Jun 14, 2025, 10:15:31 AMJun 14
to psmove
No such file or directory.
This is the same error i was getting when trying to input the command normally, and it's what got me so stumped.

Hamm Mann

unread,
Jun 14, 2025, 10:19:11 AMJun 14
to psmove
Hold on. I did it without any directories selected, and it gave me this.

execve("./psmoveapi", ["./psmoveapi", "pair"], 0x7ffdfaf28d08 /* 72 vars */) = -1 EACCES (Permission denie
d)
strace: exec: Permission denied
+++ exited with 1 +++

do i need to run it with sudo or something?

Hamm Mann

unread,
Jun 14, 2025, 10:20:18 AMJun 14
to psmove
Nope. Even that gave me the same thing.

Bastiaan van den Berg

unread,
Jun 14, 2025, 10:40:14 AMJun 14
to psm...@googlegroups.com
Dude


--
You received this message because you are subscribed to the Google Groups "psmove" group.
To unsubscribe from this group and stop receiving emails from it, send an email to psmove+un...@googlegroups.com.

Hamm Mann

unread,
Jun 14, 2025, 11:23:48 AMJun 14
to psmove
nope.

(deck@steamdeck ~)$ chmod +x psmoveapi
(deck@steamdeck ~)$ strace ./psmoveapi pair
execve("./psmoveapi", ["./psmoveapi", "pair"], 0x7ffcaa63a1c8 /* 72 vars */) = -1 EACCES (Permission denie

d)
strace: exec: Permission denied
+++ exited with 1 +++
(1)(deck@steamdeck ~)$ 

Bastiaan van den Berg

unread,
Jun 14, 2025, 11:31:23 AMJun 14
to psm...@googlegroups.com
this mailinglist is not for general linux questions
but

are you sure this binary can even run on your system? check with 'file ./psmoveapi'  

my hunch is that you didnt compile it for your system but grabbed some binary for another architecture


Hamm Mann

unread,
Jun 14, 2025, 12:03:45 PMJun 14
to psmove
All it gave me was ./psmoveapi: directory

Tomasz Sierawski

unread,
Jun 14, 2025, 12:17:04 PMJun 14
to psm...@googlegroups.com
Try 
$ file psmoveapi
what is the output?

It kinda looks like linux skill issue, and not a problem with psmoveapi

Wiadomość napisana przez Hamm Mann <connor...@gmail.com> w dniu 14.06.2025, o godz. 18:03:

Hamm Mann

unread,
Jun 14, 2025, 12:18:42 PMJun 14
to psmove
Honestly i wouldn't even be surprised if it is. I'm very new to Linux.

Hamm Mann

unread,
Jun 14, 2025, 12:19:46 PMJun 14
to psmove

Also doing it without the ./ gave me the same result.

Bastiaan van den Berg

unread,
Jun 15, 2025, 8:06:17 AMJun 15
to psm...@googlegroups.com
in case you still havent discovered it;

> cd psmoveapi 

to enter a directory

Hamm Mann

unread,
Jun 15, 2025, 9:07:20 AMJun 15
to psmove
Two things to note.
A: Of course i know how to open a directory. I'm stupid, but i'm not that stupid.
B: Doing it in the psmoveapi directory just gave me another "no such file" error.

Bastiaan van den Berg

unread,
Jun 15, 2025, 9:08:34 AMJun 15
to psm...@googlegroups.com
'ls' to read what files are in that directory

Hamm Mann

unread,
Jun 15, 2025, 9:10:07 AMJun 15
to psmove
I entered ls in the directory. This is what I got.
(deck@steamdeck psmoveapi)$ ls
bindings      cmake           contrib  docs      external  README.md  src
CHANGELOG.md  CMakeLists.txt  COPYING  examples  include   scripts
(deck@steamdeck psmoveapi)$


Bastiaan van den Berg

unread,
Jun 15, 2025, 9:32:20 AMJun 15
to psm...@googlegroups.com
the blue things are other directories, the rest are files

this seems sourcecode and no binary, did you read the README.md?

Bastiaan van den Berg

unread,
Jun 15, 2025, 9:37:48 AMJun 15
to psm...@googlegroups.com
btw, my bf runs arch and sent me this after reading the thread; 

image.png

Hamm Mann

unread,
Jun 15, 2025, 9:38:05 AMJun 15
to psmove
I did, but it just looks like a copy of what's on the Github page. Am i suppsoed to find a way to build this? And if so, how do you do that on Arch Linux? I can't find any instructions on how to do it.

Bastiaan van den Berg

unread,
Jun 15, 2025, 9:39:35 AMJun 15
to psm...@googlegroups.com

Tomasz Sierawski

unread,
Jun 15, 2025, 9:46:08 AMJun 15
to psm...@googlegroups.com
Please realize that you send this emails to everyone on this Google Group.

What you need is to learn how to use linux, how to compile source code
and probably how to read documentation.

This is definitely beyond the limits of what you will be able to achieve with a
few emails, as it looks like not only you’ll be stopped by every error and
warning on the way, but also with the lack of frame of reference you’ll also
lack the knowledge and skill to figure it out without showering the group with
messages.

That being said I’d recommend you to either find a local linux magician to
help you guide through the process and teach you a little, or find yourself a
linux community built around IM (Discord, IRC, Matrix, etc.) and ask someone
for help.

The whole process boils down to couple of linux terminal incantations, but you
need to know what is happening at each steps - great opportunity to learn how
compiling source code on linux works.

Doing this over Google Group with emails is going to be tiresome - both for
you and everyone else on the group.

Best,
Tomasz

Wiadomość napisana przez Hamm Mann <connor...@gmail.com> w dniu 15.06.2025, o godz. 15:38:

Hamm Mann

unread,
Jun 15, 2025, 9:53:02 AMJun 15
to psmove
Thanks for informing me about that. I've not been in a google group before, so i had no idea that everyone recieved an email each time a new message was sent. Had i known that, i wouldn't have bothered stretching this out as long as i have. I am fortunate enough to be in a Discord server with a couple of other Linux wizards, but the main thing they're stumped on is how, for some reason. Libusb always seems to be missing whenever i try to build something despite us constantly reinstalling it.  I do feel like we're getting close, though. If we can figure that out, then we'll probably be able to access the pairing commands.

Apologies for dragging this out for so long,
Hamm Mann
Reply all
Reply to author
Forward
0 new messages