Grasscutters / Cultivation

A custom launcher designed to make it as easy as possible to proxy anime game traffic to private servers.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[Feature Request] Linux support

RBNXI opened this issue · comments

commented

Probably it's too soon to ask for a Linux port (although I think it should be easy, since the main problem would be launching the game on Linux but that's easy solvable launching the Lutris launcher.bat file of the game instead of the .exe), but could we get a quick guide on how to launch Cultivation with Wine?, it's currently impossible without some tinkering that I don't know (or maybe it's absolutely impossible to run it with Wine for some technical reason?).

Linux/Mac builds are possible, they just have to specifically be built on Linux/Mac. I’ll probably setup GitHub actions at some point to create automated Linux builds

commented

at the moment, a few of cultivation's base logic (embedded in src-tauri) is platform specfiic and locked to windows. while it's in theory possible, it isn't well supported at the moment. (only a few methods have os checks)

it is worth noting that cross compatibility is planned (it's on our trello that we don't use)

afaik linux require some client patching to make it work

commented

afaik linux require some client patching to make it work

You mean to run Genshin on Linux? It doesn't need a patch, only a fix to some registry entries and a redirect to ip 0 for some calls.
I mean, I can play Genshin in Linux, the problem is that Cultivation is not compatible with Linux.

afaik linux require some client patching to make it work

You mean to run Genshin on Linux? It doesn't need a patch, only a fix to some registry entries and a redirect to ip 0 for some calls. I mean, I can play Genshin in Linux, the problem is that Cultivation is not compatible with Linux.

Don't they ban linux users? Don't tell me I could've had played all this time without my phone?

Never heard of a linux user getting banned, I played linux myself for a while no problem

commented

In general, for most games, even with the most aggressive patches that forces the game to run without anticheat, the worst problem could be that you get kicked of the game some times because the game thinks that your files are corrupted, but you won't get ban if you don't cheat.
In genshin I've never have the tiniest problem, and of course I'm not banned either.

Sorry, I was half sleep and couldn't have been more ambiguous.

I may really be gullible. I read last year about having to disable anti-cheat in order to run GI on linux and also read comments of people getting banned and honestly I freaked out, didn't want to loose my whale dolphin (ish) account. You mean to say online games (the ones using anti-cheat) don't ban linux users? I mean the ones that require tampering with the game files. I've read this for some online games, but who knows if it's really true or not. Which is one of last topics I read a while ago about fully supporting gaming on linux, games that require kernel-level access, how it affects linux and its users and solutions such as providing access to some dummy interface.

I also play different online games on linux and it really feels good not having to rely on windows. This could only get better by getting full wine-wayland support :)

Ugh, truth is I don't really have enough experience with rust or I would've opened a PR to replace the windows specific code. Tauri looks like a nice toolkit, I'll have to give it a try some day, my javascript is getting rusty (coding as a whole lol).

You mean to say online games (the ones using anti-cheat) don't ban linux users?

We don't have any firsthand accounts of it happening. This can change at any time and nobody here will be able to do anything for you if you do get banned. I would personally consider getting banned from this game to be a blessing, but I don't blame anyone for feeling differently about that.

It's against ToS, there's more than enough potential ways for them to detect it (normal operation for the Windows client expects remote code execution with admin access), and on the other hand they want paying customers to stay addicted and giving them some forced time off might wake them up to how pointless it all is.

Nobody here can guarantee anything will happen either way, and even if they claim they can, they'll disappear if you ever ask them to pay for a banned account ;)

commented

You mean to say online games (the ones using anti-cheat) don't ban linux users?

For MOST games, that's the case. And if the game is playable without any tinkering, it's probably just running the anticheat with Wine, so it should be legal and you shouldn't get banned. But if the game needs a patch that disables the anticheat, either you get automatically banned (if the anticheat is VERY aggressive, and I've never have this problem personally) or the game let's you play as long as you don't cheat.
For genshin... I haven't heard anyone getting banned because of playing in Linux, and you have a Linux patch in the Lutris website, so there are a lot of people using it and no one has reported a ban yet.
BUT, in the case of Grasscutter, even when no one should be banned for using it, it's recommended not to use the same genshin installation for playing in the official servers and Grascutter, just in case.

games that require kernel-level access

Like Valorant, right? I don't know if that would be possible in Wine, probably yes, at some point, but if that requires some kernel level patch FOR LINUX... I wouldn't play it.

I also play different online games on linux and it really feels good not having to rely on windows

Same :D

I would've opened a PR to replace the windows specific code

If you do so, you have my gratitude :D

commented

Has this progressed since then?

Nope

Ok, I compiled the launcher and it works (Arch Linux).

My next step would be patching the game once I download it from official launcher.

And final step would be trying to launch the game from Cultivation.

But of course there's no built-in Wine/Proton to launch this game for Linux, so, I might need some hints about which source file should I modify to add the ability to execute Wine/Proton by pressing "Launch" button.

If somebody is interested in cooperation to launch the game in Linux, feel free to DM me in discord: Алладин#8211

I hope soon I'll be able to send PR.

My next step would be patching the game once I download it from official launcher.

From my discoveries while working on #83, client patching seems to be completely broken currently. So I don't think you'd have much luck with that unless you fix it yourself.

I might need some hints about which source file should I modify to add the ability to execute Wine/Proton by pressing "Launch" button.

I'm not sure myself what files you'd need to modify, but it might be a good idea for when Linux supported is implemented to automatically patch the game for Linux support. If you need help with developing the patcher, feel free to contact me and I'll see what I can do when I get time.

This is still actively being worked on, and I already have ideas on how I will handle it. The best way to get linux support is to just wait for me to finish it :P

Sent a message to subscribe to this issue 💾

Edit: oof, looks like i can subscribe w/o doing that, sry 🙏

I'm so hyped for Linux Support, finally no VM needed

If y'all need some base to work with, I can PM you some an anime game launcher

But of course there's no built-in Wine/Proton to launch this game for Linux, so, I might need some hints about which source file should I modify to add the ability to execute Wine/Proton by pressing "Launch" button.

No need to reinvent the wheel, there are other projects that do exactly the same, launch a windows game using a wine prefix with dxvk, for example: https://github.com/goatcorp/FFXIVQuickLauncher

@SpikeHD If you need more ideas or just are curious, the ffxiv launcher does exactly this (except the patching).

commented

If you need specific examples for this game you can look at https://github.com/an-anime-team/an-anime-game-launcher or the GTK alternative written in rust https://github.com/an-anime-team/an-anime-game-launcher-gtk

If you need specific examples for this game you can look at https://github.com/an-anime-team/an-anime-game-launcher or the GTK alternative written in rust https://github.com/an-anime-team/an-anime-game-launcher-gtk

It's specifically said that you should not send links to their project publicly. Please delete them.

commented

If you need specific examples for this game you can look at https://github.com/an-anime-team/an-anime-game-launcher or the GTK alternative written in rust https://github.com/an-anime-team/an-anime-game-launcher-gtk

It's specifically said that you should not send links to their project publicly. Please delete them.

I am one of the devs and admins so no I won't.

Didn’t know about that.
Thanks for making it.

Besides a fully supported game launcher for Linux, is it possible to port Grasscutter patcher only and release it individually?

Would it be possible to pack cultivation into flatpak? :O For steam deck! :)

Yeah, that'd be awesome.
Is there any update on Linux support for Cultivation?

I'd just like to interject for a moment. What you're refering to as Linux, is in fact, GNU/Linux, or as I've recently taken to calling it, GNU plus Linux. Linux is not an operating system unto itself, but rather another free component of a fully functioning GNU system made useful by the GNU corelibs, shell utilities and vital system components comprising a full OS as defined by POSIX.

Many computer users run a modified version of the GNU system every day, without realizing it. Through a peculiar turn of events, the version of GNU which is widely used today is often called Linux, and many of its users are not aware that it is basically the GNU system, developed by the GNU Project.

There really is a Linux, and these people are using it, but it is just a part of the system they use. Linux is the kernel: the program in the system that allocates the machine's resources to the other programs that you run. The kernel is an essential part of an operating system, but useless by itself; it can only function in the context of a complete operating system. Linux is normally used in combination with the GNU operating system: the whole system is basically GNU with Linux added, or GNU/Linux. All the so-called Linux distributions are really distributions of GNU/Linux!

That's like saying an apple is not an apple, but it is the combination of an apple and a pear...

That's a very bad analogy. Linux is a kernel. However, it would be more accurate to say that Linux is not the OS, but the several other free components are what make up the OS, and that they are all equally important, but that including them all in the name would make it a mouthful.

Still

Kernel = kernel + software

Is what this copypasta says

And then we have alpine Linux.

I'd just like to interject for a moment. What you're refering to as Linux, is in fact, GNU/Linux, or as I've recently taken to calling it, GNU plus Linux. Linux is not an operating system unto itself, but rather another free component of a fully functioning GNU system made useful by the GNU corelibs, shell utilities and vital system components comprising a full OS as defined by POSIX.

Many computer users run a modified version of the GNU system every day, without realizing it. Through a peculiar turn of events, the version of GNU which is widely used today is often called Linux, and many of its users are not aware that it is basically the GNU system, developed by the GNU Project.

There really is a Linux, and these people are using it, but it is just a part of the system they use. Linux is the kernel: the program in the system that allocates the machine's resources to the other programs that you run. The kernel is an essential part of an operating system, but useless by itself; it can only function in the context of a complete operating system. Linux is normally used in combination with the GNU operating system: the whole system is basically GNU with Linux added, or GNU/Linux. All the so-called Linux distributions are really distributions of GNU/Linux!

Did you seriously revive a 6 months old issue just for saying Linux != GNU/Linux wtf

Can we please shut up about this, I don't want emails about this shit.
@SpikeHD can you limit conversation on this please.

I want to get emails about the actual development of this thread, not your inane ramblings. Please. Make a new issue if you want to complain about that. Thanks.

Yes, please reserve this thread for discussions on the topic, I will not write any more as not to add to the pile.

Yeah, that'd be awesome. Is there any update on Linux support for Cultivation?

Not really, it still can exist and some theorycrafting has been done but no real progress has been made recently.

No.

Electron is a bloated memory hog, since it bundles an entirely separate Chromium engine AND a NodeJS runtime with it. This, and Linux support is just as easy with Tauri, as it uses WebkitGTK.

If you'd like to discuss switching backends further to stop clogging this poor issue, please make a new issue so I can close it as "not planned" :P

LMAO this thread ended up on r/copypasta: https://www.reddit.com/r/copypasta/comments/124s9ea/github_comments_are_a_work_of_art/

Collei mains are genius mfs that this community does not deserve to have.

Electron is a bloated memory hog, since it bundles an entirely separate Chromium engine AND a NodeJS runtime with it. This, and Linux support is just as easy with Tauri, as it uses WebkitGTK.

If you'd like to discuss switching backends further to stop clogging this poor issue, please make a new issue so I can close it as "not planned" :P

weirdly enough, tauri (on windows) uses more RAM than electron
I don't know why, might have been because I ran it in dev mode and not production mode, but it was using way more RAM, almost double

tauri on windows uses the webview2 runtime (ms edge)

(I literally just made an empty tauri project and had it visit discord.com and compared it with the electron client for discord)

Running in debug mode typically uses around double the amount of RAM. You can also take a look at this web to desktop comparison (though I do not know how dated it is) to compare them all.

Tauri typically comes out on top - or close to it - in each benchmark.

tauri on windows uses the webview2 runtime (ms edge)

Haha yes I know, that was another reason for choosing it, as all newer installs of Win10 (and EVERY install of Win11) has it preinstalled already, making for beautifully small file sizes :)

I also wouldn’t be surprised if Discord uses an optimized bundle or a fork of Electron with modifications for their desktop app tbh but that is purely speculation

Feel free to fork but, again, I am not changing the framework we use. I would also disagree that an increase of disk and RAM usage isn't an issue, as I've seen many people running PS related software on machines that frankly need every MB of RAM and HDD space they can get 😄.

Given that reinstalling WebView2 (and/or using compat mode) is a known solution to a problem that isn't our fault (blame Microsoft for having it break on Win11, I guess), I'll put it in the README.

Now please keep this issue related to Linux support. Just @ me in the Discord if you care to talk about unrelated stuff further :)

commented

I have ported some of the logic of Cultivation to Linux with anime-launcher-sdk, although I have a few issues:

  1. The usage of slashes in paths is inconsistent, which I fixed in the slashes branch of my clone (which is safe to pull, it also fixes a bug and changes what one function prints).
  2. The game has to be installed (and probably patched) with the other launcher.
  3. I'm not sure if proxying should be a part of anime-launcher-sdk, therefore I implemented it with environment variables. Maybe it should, but before adding it I'd ask @an-anime-team for some kind of consensus on implementing proxy support into that library, since implementing it could make anime-launcher-sdk problematic in the company's eyes.
  4. My clone Cultivation does not run as root, since it's unsafe and causes problems with storing the app's data. This causes some parts of this app to not work properly (like copying CA certs, which only works correctly on Debian-based distros anyway) (or binding port 443 on GC fails, bc it requires root or certain capabilities)
  5. Patching does not work. version.dll is copied but is not loaded. The patch itself does work if it's copied as mhypbase.dll

Feedback is highly appreciated.

  1. Feel free to PR that one! I have been fixing them sometimes as I see them but I have clearly not fixed them all
  2. Does the launcher do anything extravagant that users cannot do themselves? Just curious as to whether some of it can also be done via Culti
  3. Does the usage of env variables actually work? I know some programs listen to it and some ignore it entirely so I just want to make sure.
  4. That's totally fine, I would rather have mostly-working Debian support than no Linux support at all. Other distros can be figured out in the future.
  5. We can just have Culti specifically rename it to mhypbase.dll when it knows it's running on Linux, that's probably fine

@fnr1r Meant to ping you in the original comment, sorry ^

commented

@SpikeHD

  1. PR sent. (#186)
  2. From what I've gathered, the only thing we have to care about is Linux-specific patches (called "dawn") and renaming mhypbase.dll (which is its own option). In the case of Linux-specific patches, I'll error out if the game is not patched. Installing the game and changing settings (like upscaling, managing wine version or changing the /etc/hosts file to block telemetry) can be handled by the other launcher.
  3. Yep. Wine respects http_proxy and https_proxy environment variables. I tested it on a clean install of Ubuntu.

As for 5, today I finished implementing patching in a way that respects the other launcher's settings, so I think that's dealt with.

Alright that makes sense. Been about (if not more than) a year since I've played on Linux so I'm glad the patch is the same as when I did it. I think it's reasonable to expect that someone running the game on Linux will have already patched the game to work on it (either with Dawn manually or with the other launcher).

How is setting the game path handled on the Linux side? Is the DirInput now able to accept a command as it's input (eg. wine cmd /c launcher.bat as opposed to the standard C:/Path/To/Game.exe that Windows users currently do)? What other problems does the branch have atm?

(you are welcome to open a PR and just slap WIP: in front of it so we don't accidentally merge it! Makes it easy for people to see the diff)

@fnr1r forgot to ping again oops

commented

@SpikeHD
I use the same element as on Windows. Since the game_command option was not fully implemented, I removed it (although it's still in translation files). My clone also ignores the un_elevated toggle, but I have not hidden it on Linux yet.

As for other problems, I noticed some code is duplicated across Rust and TS. While it is a bit annoying, I kept most of it as-is. The one thing I moved to Rust is RSA patching.
Installing CA files is disabled since it crashed the launcher upon failing. I'll enable it once I find a way to do it across distros.
I'm not sure if anything swag-related works.
Some operations, like unpatching or stopping MongoDB, run two times, which causes some problems. In the case of unpatching, it shows a popup telling the user that unpatching failed, despite everything working. And in the case of MongoDB, one of the commands fail and prints an error message in the console.
That's about it.

@SpikeHD
putting cultivation on flatpak/flathub could be a way to get around supporting all distros. it's sandboxed tho so there might be a few issues with it to fix.
(personally waiting for an arch release tho somone will probably make an unofficial aur package at some point)

I don't have the time or energy to put it there and debug any weirdness that comes from the sandboxing right now, so you'll just have to settle with Github releases and/or whenever someone decides to maintain an AUR package

commented

is an appimage maybe less "sandboxy"? because appimages also run on deck

or maybe even a zip with a runnable bin or whatever

Culti currently is erroring when attempting to bundle an AppImage. Might just be my WSL, so if someone else is able to do it lemme know

Is there a branch for packaging it that you were working on spike? I can bang my head against it on a native server if you want

No branch, Tauri should be handling it all already so it shouldn't require more than a simple pnpm tauri build. You are more than welcome to give it a shot though! @GarnetSunset

I'll give it a shot! :)

commented

@SpikeHD putting cultivation on flatpak/flathub could be a way to get around supporting all distros. it's sandboxed tho so there might be a few issues with it to fix. (personally waiting for an arch release tho somone will probably make an unofficial aur package at some point)

This is actually not recommend as we also had our launcher on flathub until we back tracked and started our own flatpak repo due to backlash caused by gamingonlinux creator due to the fact that they(the gnome/flathub team) accept an app like ours so we came to an agreement to just move off the platform. You can actually see how we handle publishing to the repo here: https://github.com/an-anime-team/flatpak-builds/blob/main/.github/workflows/build-pak.yml

PS: sorry for the ping spike forgot to remove your handle

commented

a flatpak would be really awesome, especially for deck ppl (or in general immutable system partitions), and for the normal version maybe a rename should be done as it clashes with a package available in the default ubuntu AND debian repos.

https://packages.debian.org/bookworm/cultivation
https://packages.ubuntu.com/jammy/cultivation

bonus advantage would be not needing root for hosts file stuff as can be seen in AAGL

An issue that I saw, I can't figure out where it's referenced but, there's a part of the build system where it tries to run "appimage.sh", but that script doesn't exist, but build_appimage.sh DOES. Tried grepping for the place it was called with no luck

Successfully builds now! :)

👏 what'd you change? you're welcome to make a PR

That's the weird part, nothing!
Installed all the required awful dependencies for tauri (which i can get a list of they were a LOT)
Installed node 18.17.1
Build it, it worked.

a@ToledoDante:~/Cultivation$ git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean
a@ToledoDante:~/Cultivation$ pnpm tauri build

> cultivation@1.0.26 tauri /home/a/Cultivation
> tauri "build"

   Compiling cultivation v1.2.0 (/home/a/Cultivation/src-tauri)
    Finished release [optimized] target(s) in 11.72s
warning: the following packages contain code that will be rejected by a future version of Rust: rustc-serialize v0.3.24
note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 1`
    Bundling cultivation_1.2.0_amd64.deb (/home/a/Cultivation/src-tauri/target/release/bundle/deb/cultivation_1.2.0_amd64.deb)
    Bundling cultivation_1.2.0_amd64.AppImage (/home/a/Cultivation/src-tauri/target/release/bundle/appimage/cultivation_1.2.0_amd64.AppImage)
    Finished 2 bundles at:
        /home/a/Cultivation/src-tauri/target/release/bundle/deb/cultivation_1.2.0_amd64.deb
        /home/a/Cultivation/src-tauri/target/release/bundle/appimage/cultivation_1.2.0_amd64.AppImage

a@ToledoDante:~/Cultivation$ node
Welcome to Node.js v18.17.1.
Type ".help" for more information.
>
(To exit, press Ctrl+C again or Ctrl+D or type .exit)
>

Huh, guess my WSL was just borked. In that case I will try to setup Actions or something soon to handle that properly. Thanks for looking into it!

wOOT :) Sound good! HAven't tested on steam deck yet but i will

Huh, guess my WSL was just borked. In that case I will try to setup Actions or something soon to handle that properly. Thanks for looking into it!

Where can I try this? I don't know hoe github actions works. Is this supposed to be a way to build an appimage automatically? I want to test it on Arch

@RBNXI Well, if I remembered to upload appimages via actions then they would show up here, but obviously I didn't, so if you want you can just follow the build instructions and build it manually for now.

@RBNXI Well, if I remembered to upload appimages via actions then they would show up here, but obviously I didn't, so if you want you can just follow the build instructions and build it manually for now.

Ok, I'll try it and see. If you have time upload it too so more people can test it!

@RBNXI I’m not sure if the amd_64.zip is arch only or just a universal linux version but that seems to work. It’ll be in releases.
It won’t install it’ll just be portable wherever you leave it

@RBNXI I’m not sure if the amd_64.zip is arch only or just a universal linux version but that seems to work. It’ll be in releases. It won’t install it’ll just be portable wherever you leave it

Nah, it doesn't work. The proxy doesn't seem to work and the game won't launch.
Error:


Renamed /run/media/ruben/Anima/Juegos/genshin-impact/Cultivation/genshin/mhypbase.dll to /run/media/ruben/Anima/Juegos/genshin-impact/Cultivation/genshin/mhypbase.dll.bak
Set server to http://localhost:443
Connecting to proxy...
thread 'tokio-runtime-worker' panicked at 'called `Result::unwrap()` on an `Err` value: No such file or directory (os error 2)', src/proxy.rs:293:34
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Game already patched!
The game is already patched.
Set server to http://localhost:443
Connecting to proxy...
thread '<unnamed>' panicked at 'Can't launch game. Check the other launcher.: "Wine is not installed"', src/system_helpers.rs:325:10
thread '<unnamed>' panicked at 'called `Result::unwrap()` on an `Err` value: Any { .. }', src/main.rs:354:24

I guess the problem launching the game is that it doesn't detect the wine installation? Maybe I have to set an environment variable?. I don't know about the problem with the proxy though.

It's the weirdest thing, I kept having an issue where (to the best of my knowledge) it would launch the 4.1 client I had installed through AAGL despite the game path being set to a separate 4.0.1 client. Then when I removed the AAGL folder to try to get it to actually run the correct version, I ended up with that error above.

Update: I built the binary myself, and while the wine error went away, I'm still getting the first part of the error (seen below) and the game still isn't opening.

Set server to http://localhost:443
Connecting to proxy...
thread 'tokio-runtime-worker' panicked at 'called `Result::unwrap()` on an `Err` value: No such file or directory (os error 2)', src/proxy.rs:293:34
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Waiting for game thread timed out

So it compiles and runs fine now, but still needs some fixes to run the game properly... It's something I guess, but it's been a yer already since I opened this issue... I wish I had the knowledge to fix this already and keep testing Grasscutter on Linux like I did some time ago, but I can't since some update that broke the proxy config I was using with mitm, it's probably very outdated by now and the best way to run this is through Cultivation...
Anyways, in the meantime, if someone knows some trick to run this using Cultivation, like running Cultivation and the internal proxy (Grasscutter runs fine so no need for it, same with the patch I think) but running the game with Lutris, tell me please.

flatpak support pls 🙏