JoyShockMapper icon indicating copy to clipboard operation
JoyShockMapper copied to clipboard

ioctl input/output error whenever I attempt to load a config from the system tray menu in linux

Open linusrg1 opened this issue 1 year ago • 4 comments

This also happens when attempting to use ctrl + c to stop joyshock mapper as well. Running joyshockmapper as root I am able to overcome this issue, but while running as root I don't think that my inputs that are going through joyshockmapper have the ability to interact with my game running as my user.

I am running Arch with kernel 6.10. I just built joyshockmapper from here last night, so I am sure it is up to date.

linusrg1 avatar Sep 24 '24 17:09 linusrg1

I have attempted to add all the suggested udev rules to my system too, no dice.

I should also mention that I am currently using Joyshockmapper under wayland.

linusrg1 avatar Sep 24 '24 18:09 linusrg1

I am having the exact same issue, I was just about to report the following:

" Hello!

I am getting an error whilst using split Joy-Cons on JoyShockMapper on Arch Linux. I have complied the progream from source on the main branch. When trying to close JoyShockMapper using Ctrl + C from the command line, occasionally, I get the following error: ioctl: Innapropruate ioctl for this device

I suspect this happens when a controller disconnects, and JSM can no longer find that controller.

When this occurs, the process becomes unkillable, even with something like killall joyshockmapper in console. I am not sure if JSM is checking if the controller is disconnected or not when trying to quit.

I am using joycond and the kernel-inbuilt hid-nintendo drivers. "

I am also running the latest Arch kernel.

Jazztache avatar Sep 26 '24 05:09 Jazztache

I found out where this breaks:

JoyShockMapper/src/linux/InputHelpers.cpp at line 569: if (::ioctl(STDIN_FD, TIOCSTI, &c) < 0)

I cloned the build somewhere else and isolated what error code I got from the ::ioctl call. It always comes up with -1 if you're not the root user, and 0 for the root user.

The problem function is on line 563 of the same file above. I replaced it with this code for debugging purposes.

bool WriteToConsole(in_string command)
{
	constexpr auto STDIN_FD{ 0 };
	for (auto c : command)
	{
    // https://www.geeksforgeeks.org/how-to-find-the-type-of-an-object-in-cpp/
    string commandType = typeid(c).name();
    string whichCommand = "[JAZZ] Attempting to process command that has object type of" + commandType + "\n";
    std::fprintf(stdout,whichCommand.c_str());
    int ioctlResult = ::ioctl(STDIN_FD, TIOCSTI, &c); //I think it breaks here.
    // BUG FOUND: ::ioctl call is not working, so I have to fix that.
    string report = "[JAZZ] Result of variable ioctlResult is " + to_string(ioctlResult) + "\n";
    // https://stackoverflow.com/questions/14784367/cs-printf-and-fprintfstdout-are-not-printing
    // https://cplusplus.com/forum/beginner/26196/
    std::fprintf(stdout, report.c_str());
		if (ioctlResult < 0)
		{
			perror("ioctl");
			return false;
		}
	}

	char NEW_LINE = '\n';
	::ioctl(STDIN_FD, TIOCSTI, &NEW_LINE);

	return true;
}

Not sure what TIOCSTI does. I'm going to read up on the ::ioctl function and come back to this.

Jazztache avatar Nov 27 '24 09:11 Jazztache

...So, TIOCSTI is being used to manually type the letter Q,U,I,T into the terminal. It does this for both Ctrl+C and the status icon. I can tell because when I run with sudo permissions, I see every letter get output between my debugging statements. When I run without, I get this:

Screenshot_20241127_210723

This means that in the Linux version of JoyShockMapper, inputting characters on the user's behalf is broken. This is why both the Q,U,I,T and the .,/,A,u,t,o,L,o,a,d,/,w,h,a,t,e,v,e,r,.,t,x,t are broken.

I think that the systray should call the internal C++ functions directly? That would completely sidestep the entire issue. Same with Ctrl + C just leading directly to the quit function. I hate to be critical, but the current method of using text macros seems like a really hacky workaround.

Jazztache avatar Nov 27 '24 10:11 Jazztache

Update on the situation: https://github.com/Electronicks/JoyShockMapper/pull/162 This pull request seems to fix the issue, along with a build issue in the most recent version. I recommend compiling this version from source if possible.

Jazztache avatar Jul 31 '25 01:07 Jazztache