Zagrios / bs-manager

An all-in-one tool that lets you easly manage BeatSaber versions, maps, mods, and even more.
GNU General Public License v3.0
584 stars 45 forks source link

[BUG] : Linux doesn't show unicode titled maps #585

Closed silentrald closed 1 month ago

silentrald commented 1 month ago

Bug Description

When downloading maps with unicode characters, they do not show up in the song list within Beat Saber.

Reproduction Steps

Download any song with BSManager with any unicode character. Sample map to download:

Screenshots

Error logs from Beat Saber 366446147-7c064d93-257d-4c65-b173-3361141550d5

System Specs

OS: Arch Linux KDE Plasma X11/Wayland

Workarounds

Additional context

The main issue here is within proton/wine itself when windows path is converted to linux path, but I'm not sure why running it as a non-steam game solves this issue. Might try to look into environment variables that might lead to somewhere.

kevin-wijnen commented 1 month ago

Hmmm, can not replicate it myself:

image image

On what file system did you try installing the songs onto, or is BSManager located in @silentrald? It could be related to the file system of the storage medium. I'm running ext4 as the filesystem.

silentrald commented 1 month ago

@kevin-wijnen It should show in the filesystem just fine. I just can't see the song in game when you run the AppImage within Dolphin, can you search it in game? Also I forgot that this happens in 1.37.1 but not in 1.29.1.

Also I run btrfs.

kevin-wijnen commented 1 month ago

@kevin-wijnen It should show in the filesystem just fine. I just can't see the song in game when you run the AppImage within Dolphin, can you search it in game? Also I forgot that this happens in 1.37.1 but not in 1.29.1.

Also I run btrfs.

My bad! Yeah, running 1.37.1 causes the entire custom song list to simply not load (looping infinitely). I could not find where the logs are, produced by the Debug Mode, however.

silentrald commented 1 month ago

Ohhh that issue relates to #578, there were hidden dependencies that weren't documented so your BSIPA isn't run correctly but already gotten a #586 PR to remove those dependencies, since that's better for the Steam Deck users.

You could run the PR version if you know how to run node/electron stuff but you can also download the AUR bs-manager-git build of this which links the dependencies of dotnet-3.1.426 and screen automatically.

kevin-wijnen commented 1 month ago

Ohhh that issue relates to #578, there were hidden dependencies that weren't documented so your BSIPA isn't run correctly but already gotten a #586 PR to remove those dependencies, since that's better for the Steam Deck users.

Hmm. I did install screen and dotnet system wide however as I noticed issue #578 before. Were there other dependencies I did miss that would impact it?

silentrald commented 1 month ago

The screen and dotnet combination gives a silent error so there was a reason for me to drop it as well. The mostlikely culprit is dotnet version mismatch since you really need the 3.1.426 version for some odd reason for IPA.exe to run correctly.

Try running this command and see if the version 3.1.426 is available.

dotnet --list-sdks

You can also try running this command within your BS version folder if it doesn't return an error.

cd /some/path/to/BSManager/BSInstances/<version folder>
dotnet ./IPA.exe -n
kevin-wijnen commented 1 month ago

The screen and dotnet combination gives a silent error so there was a reason for me to drop it as well. The mostlikely culprit is dotnet version mismatch since you really need the 3.1.426 version for some odd reason for IPA.exe to run correctly.

Try running this command and see if the version 3.1.426 is available.

dotnet --list-sdks

You can also try running this command within your BS version folder if it doesn't return an error.

cd /some/path/to/BSManager/BSInstances/<version folder>
dotnet ./IPA.exe -n

Hmmm. Gives me the following error, despite version 3.1.426 being present:

image

silentrald commented 1 month ago

Ahhhh yeah you need to set this environment variable.

export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
kevin-wijnen commented 1 month ago

Ahhhh yeah you need to set this environment variable.

export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1

Hmm, now I get the following error when trying to run dotnet ./IPA.exe in any instance's directory:

ERROR: Game does not seem to be a Unity project. Could not find the libraries to patch.
[Press any key to continue]

It doesn't seem that mods are loaded in properly either.

silentrald commented 1 month ago

Did you launch the game before running the IPA.exe command?

kevin-wijnen commented 1 month ago

Did you launch the game before running the IPA.exe command?

I did. Even when having launched the game via BSManager and keeping it running, it still gets the same error. I did it in the 1.37.1 (1) folder, which represents my modded instance.

silentrald commented 1 month ago

Seems that it's not getting/locating the correct Beat Saber executable from here issue. Can you try if you can running either:

dotnet ./IPA.exe foo -n "./Beat Saber.exe"

or try if you can do it in wine instead

wine ./IPA.exe foo -n "./Beat Saber.exe"

If that doesn't work, remove the "foo" in the cmdlet.

kevin-wijnen commented 1 month ago

Seems that it's not getting/locating the correct Beat Saber executable from here issue. Can you try if you can running either:

dotnet ./IPA.exe foo -n "./Beat Saber.exe"

This did work for me. Running through WINE gave me an "illegal characters" error but that might have to do with not having the .NET SDK installed on my WINE virtual disk.

Is there any way to have the launcher locate the Beat Saber executable properly, as with the shell command? (And possibly run this through Linux over WINE?)

silentrald commented 1 month ago

Running through WINE gave me an "illegal characters" error but that might have to do with not having the .NET SDK installed on my WINE virtual disk.

Iirc, this is only a warning text because we're passing the arguments with wine, not sure why this is though but can you post the full logs so that I have a full context of the error? Also could you post this in #578 as well so I can track any errors with the wine runtime.


Since you have the mods installed properly, can you check in game if you have the mods installed (SongCore is important here) and then check if the song that you've downloaded is visible in game.

kevin-wijnen commented 1 month ago

Since you have the mods installed properly, can you check in game if you have the mods installed (SongCore is important here) and then check if the song that you've downloaded is visible in game.

Songcore was installed and seems like the misterlihao song you mentioned and I downloaded doesn't show up. Using BetterSongList to download any unicode titled song also fails:

(On 1.37.1) image

Also able to reproduce on 1.29.1 (but I got the strange issue that shared maps don't work at all on 1.29.1 🤔; removing any unicode characters from folder names fixes said issue however).

silentrald commented 1 month ago

Can you check as well if running BSM as a non-Steam games also works as a solution? It's much better since it may support downloading songs in game as well.

silentrald commented 1 month ago

Already got a fix working. Just needs to set SteamEnv=1 which I think just tell the Beat Saber executable to run in a steam environment or something. You can try the PR if the fix works as well.

kevin-wijnen commented 1 month ago

Can you check as well if running BSM as a non-Steam games also works as a solution? It's much better since it may support downloading songs in game as well.

Would you still like me to visit this workaround?

Already got a fix working. Just needs to set SteamEnv=1 which I think just tell the Beat Saber executable to run in a steam environment or something. You can try the PR if the fix works as well.

As reported in #590: the solution seems to work just fine. :+1:

silentrald commented 1 month ago

Would you still like me to visit this workaround?

No need, the non-Steam game already sets that environment variable so no need to replicate.

Thanks for the help as well.

kevin-wijnen commented 1 week ago

Ahhhh yeah you need to set this environment variable.

export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1

Hey quick question, this environment variable seems to be crashing other .NET applications I am using. This causes the following error in some .NET apps on Linux:

System.Globalization.CultureNotFoundException: Only the invariant culture is supported in globalization-invariant mode. See https://aka.ms/GlobalizationInvariantMode for more information. (Parameter 'name')
en-US is an invalid culture identifier.

Is it possible for BSManager to automatically run IPA.exe with DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1 only for said session? To not need it as a system/user-wide environment variable?

kevin-wijnen commented 1 week ago

Mentioning @silentrald as it involved their suggested environment variable fix

silentrald commented 1 week ago

@kevin-wijnen try to revert that env var and pull the latest version of BSM. We're not using dotnet and screen anymore as of #586 getting merged. Double check if you can still install mods just to verify if it still works and check your other .NET projects if it doesnt affect it anymore.