TormStorm / jagex-launcher-linux

Community projects to install the Jagex Launcher and use Jagex Accounts in Linux
GNU Affero General Public License v3.0
220 stars 24 forks source link

Can't enable GPU or 117HD plugin? #94

Closed charlesalec closed 1 year ago

charlesalec commented 1 year ago

Describe the bug Cannot enable GPU or 117HD plugins in RuneLite after switching to JagexLauncher via this guide.

To Reproduce Steps to reproduce the behavior:

  1. Go to plugins
  2. Enable GPU or 117HD

Expected behavior Plugin enables, graphics change

Screenshots Not applicable.

Please complete the following information: Distributor ID: Ubuntu Description: Ubuntu 22.04.3 LTS Release: 22.04 Codename: jammy

nmlynch94 commented 1 year ago

Do you have an integrated GPU? If so, this is likely that it's using that instead of your dedicated GPU.

If that's the case, try to edit runelite.sh in your lutris install dir like shown here https://github.com/TormStorm/jagex-launcher-linux/pull/74 depending on if you have nvidia or amd. That may fix your problem.

charlesalec commented 1 year ago

I only have a dedicated GPU, no on-board or whatnot. I'll take a look, thanks a lot for your reply.

charlesalec commented 1 year ago

That didn't work either sadly (setting the .sh config to what was said in issue #76)

Any other ideas?

Calmata commented 1 year ago

Hello! I'm assuming you've been able to use the GPU plugin on linux before, yes? If so, can you tell me if you've used the RuneLite AppImage or the .jar launcher, and if you still have either on your computer?

If you've not had it working before, can you let me know what GPU you have? I make no promises about 117HD, but there are a couple of workarounds for the GPU plugin we can try.

charlesalec commented 1 year ago

Hey Calmata, thanks for the reply.

I've indeed used RuneLite (until recently) on Linux, using the .jar executable. I still have it on my computer locally. I'm not too bothered about 117HD (I'm a bit of a sticker for the old-school aspect of OSRS haha) so if you have a workaround for the GPU plugin that would already be great. I assume this is a known issue then?

Also, I have an Nvidia 1080 Ti, using the 535 nvidia-driver.

Thanks again!

Edit: My bad, I am actually using the AppImage. When I run which runelite I get /snap/bin/runelite, so I assume it's indeed an AppImage.

Calmata commented 1 year ago

No problem Charlesalec, happy to help

The /snap/bin/runelite find tells me that you have a snap version of RuneLite, which is a similar idea to flatpak, but works differently. You might have installed this yourself deliberately, or unknowingly through your distro's package manager at some point in the past, possibly in addition to the jar or AppImage versions which aren't "installed" in the traditional sense, so which won't usually find those.

In theory, it's possible to redirect the Jagex Launcher so that it starts up any version/distribution of RuneLite - after installation, all we do is swap out the expected RuneScape.exe/RuneLite.exe with a script that starts the appropriate native client with the relevant data handed to it to log in (identical behaviour to the launcher on Windows).

I don't believe we've tested the snap distribution of RuneLite at all, but I imagine it's not much different on paper to flatpak, so we have a handful of options before us:

A) Determine if you already have/get you the .jar/AppImage version of RuneLite, and configure the launch script (partially tested, easy) B) Reconfigure the launch script to point to the snapcraft distribution of RuneLite that we know you have (untested, but likely easy) C) Try and work out why the flatpak cannot access your GPU's full capabilities, and employ further workarounds (untested, potentially hard, might not find/be a resolution at all)

OR

D) Switch out to the Bolt launcher, which is a natively built but third-party launcher developed by a contributor to this project (Absolute easiest, uses existing clients and official Jagex login page, still waiting on Jagex approval)

As regards to the workarounds for option C) and known issues, sort of: there are several known issues with nvidia's 535 drivers not specific to this project, chief amongst them that Vulkan fails to apply to (some if not all) flatpaks and some Steam games, but there's been many varying results depending on distro, config, and window system. I'm not super confident that we'll find a way to make it work (I mostly work with AMD hardware), but I'm happy to try if you'd prefer that.

Please let me know which approach you'd like to take, and we can go from there.

charlesalec commented 1 year ago

Hey Calmata,

Thanks for the in-depth answer!

I think A or D are probably the best options. For A, where do I find the launch script?

Otherwise, if D is by far the easiest, we can go ahead with that (with the hope that at least 1 of the 2 will work).

Once again, thanks so much!

Calmata commented 1 year ago

Hello, No worries! For option A), In Lutris, you can select the Jagex Launcher, and to the immediate right of the "play" button, click the up arrow. From there, you can click "browse files". This should open your file explorer (Ubuntu uses Nautilus by default) at the location of the project installation. From there, click drive_c > Program Files (x86) > Jagex Launcher > Games > RuneLite and the launch script is called RuneLite.sh.

Before you make any modifications, I would strongly recommend making a backup of RuneLite.sh. The environment variables are set up for the flatpak client specifically, with an OR in case it's being started from inside of a flatpak version of Lutris. If you know what you're doing, you can re-use the environment variables for the JAR, AppImage, or Snap client; they're the ones located in the second half of the OR, after the flatpak-spawn command, except for

vblank_mode=0
MESA_GL_VERSION_OVERRIDE=4.5FC

as these are Mesa driver specific, which you aren't using. You might consider replacing them with just __GL_SYNC_TO_VBLANK=0 to disable vsyncing (the FPS Control plugin should still work) If you're unsure, let me know and I'll work it out.

D) is almost certain to work. Adamcake and nmlynch94 have been working tirelessly on building and rebuilding it to incorporate all the various clients; currently I believe RS3, OSRS and RuneLite are all supported, with HDOS in the works as we speak, alongside a less barebones appearance. I do have to state though: whilst it's FOSS, employs identical behaviour to the official launcher, and I both trust the guys making it + use it myself, it's 3rd-party and not (yet) officially approved by Jagex, so obligatory "use at your own risk".

charlesalec commented 1 year ago

Hi,

Thanks so much! So for A), I am familiar with my way around Linux and such, but I am not entirely sure what your instructions are here - what environment variables do I need to edit? As far as I understand I need to re-configure the second part of the OR to use the AppImage/.jar executable.

For Bolt: which fork do I use? The Adamcake on or nmlynch94 (as I see they also have a fork). For Adam's version, it says it can be run directly from a release, but the release section on the right only contains the source code, so I'd need to build it from scratch.

Thanks!

Edit: nvm, I see that nmlynch94's branch is up to date with Adams.

Adamcake commented 1 year ago

If you don't want to build Bolt from source you can install it from flatpak, flatpak install com.adamcake.Bolt

charlesalec commented 1 year ago

Hi @Adamcake

That actually worked perfectly, thanks for chiming in. Couple questions:

  1. Why build the loader in C++? It's the language you're most proficient in?
  2. How does it work when RuneLite updates? Does it just re-download RuneLite again? And I assume it's stored in the app directory?
  3. I see profile importing isn't working, despite being enabled. Is this a known glitch?

Thanks again, I'll close the issue.

Edit: I see there's also issues with notifications from RL, as well as with screenshots?

Calmata commented 1 year ago

Appending this clarification here for others who might find this but for whatever reason prefer not to use Bolt:

Within RuneLite.sh we have

#!/bin/sh
set -e
flatpak run --env=PULSE_LATENCY_MSEC=200 \
    --env='vblank_mode=0' \
    --env='MESA_GL_VERSION_OVERRIDE=4.5FC' \
    net.runelite.RuneLite || \
flatpak-spawn --host flatpak run \
    --env=PULSE_LATENCY_MSEC=200 \
    --env='vblank_mode=0' \
    --env='MESA_GL_VERSION_OVERRIDE=4.5FC' \
    --env=JX_ACCESS_TOKEN="$JX_ACCESS_TOKEN" \
    --env=JX_CHARACTER_ID="$JX_CHARACTER_ID" \
    --env=JX_DISPLAY_NAME="$JX_DISPLAY_NAME" \
    --env=JX_REFRESH_TOKEN="$JX_REFRESH_TOKEN" \
    --env=JX_SESSION_ID="$JX_SESSION_ID" \
    net.runelite.RuneLite

The relevant environment variables are the ones starting with "JX_" I.E JX_SESSION_ID="$JX_SESSION_ID". Modify the launch script to call whichever client you need, including those environment variables in the appropriate manner.

charlesalec commented 1 year ago

Hi Calmata, which specific environment variable would you have to edit to use a different launcher? Could you give an example for which environment variable, including the example path (using a .jar, let's say).

Thanks again for your time and help, I really appreciate the help with resolving this.

Calmata commented 1 year ago

@charlesalec the command/script itself would be different; for the RuneLite JAR client it would be something along the lines of (haven't tested this, just an example)

#!/bin/sh
export JX_ACCESS_TOKEN="$JX_ACCESS_TOKEN"
export JX_CHARACTER_ID="$JX_CHARACTER_ID"
export JX_DISPLAY_NAME="$JX_DISPLAY_NAME"
export JX_REFRESH_TOKEN="$JX_REFRESH_TOKEN"
export JX_SESSION_ID="$JX_SESSION_ID"
java -jar /path/to/RuneLite.jar 

No worries, I give all credit to Torm, nmlynch94 and Adamcake - they're the brains behind this, I just help out with what I've picked up from them :)

charlesalec commented 1 year ago

Alright, noted! I may give that a try later, but for now Adam's client seems to work well. They're in the process of getting it approved by Jagex, you said?

Adamcake commented 1 year ago

Why build the loader in C++? It's the language you're most proficient in?

No particular reason other than that it's the language Chromium Embedded Framework is natively made in. But it's definitely a good choice - C++ makes a better product than most langs these days, firstly in terms of performance, but even more so in terms of reproducible builds for linux package managers and that kind of thing. (I'm aware C would be even better for those things, but CEF's C API is really flaky at the best of times.)

How does it work when RuneLite updates? Does it just re-download RuneLite again? And I assume it's stored in the app directory?

Yes it will re-download the JAR file any time there's a newer version. Currently it gets that information from the runelite flatpak.

I see profile importing isn't working, despite being enabled. Is this a known glitch?

I'm not sure what you mean by profile importing, are you asking about upgrading/importing a game account into a Jagex account? You'd need to do that via the website, I don't think you can do it in the official launcher?

Calmata commented 1 year ago

@charlesalec That's the hope, yeah - Torm's guide (this GitHub) is already linked on the official knowledge base, I think we're all hoping to get a seal of approval from Jagex on Bolt - Adam's put in a lot of great work! Feel free to join the Discord if you'd like to stay in the loop - it's linked on the project wiki from the main GitHub project page :)

ConnorDY commented 1 year ago

I had this problem after updating my Nvidia drivers recently. Uninstalling and reinstalling RuneLite using flatpak resolved the issue for me.