Giter VIP home page Giter VIP logo

runescape-snap's Introduction

RuneScape Snap

Get it from the Snap Store

This repository contains the build file and wrappers necessary to run RuneScape and Oldschool RuneScape on Linux systems in a Snap container format. RuneScape 3 does provide official Linux support, but is limited in it's supported distributions. Old School RuneScape does not have any Linux specific installer, but is a Java based game and can be run with a Java runtime environment. This Snap package resolves these dependencies issues allowing for the games to run on any Linux compatible system, with the Snap benefits of sandboxing and confinement.

Install Instructions

Ensure snapd is installed. Snap is installed by default on most Ubuntu derivatives. Instructions can be found here

At a terminal, run

sudo snap install runescape

Some systems may have graphical installers for Snap packages pre-setup. You might also want to consider sudo snap install snap-store to get the official Snap GUI installer.

Usage Instructions

Once installed, desktop icons should be available in your desktops standard start menu. You can also launch the game via the terminal.

runescape.rs3 or snap run runescape.rs3

runescape.osrs or snap run runescape.osrs

runescape.reset or snap run runescape.reset

In the event environmental variables need to be passed to the game to modify it's behaviour in any capacity, users can place a bash script in the snaps directory, e.g., ~/snap/runescape/current/ called

osrs-user-config

rs3-user-config

These scripts will be automatically loaded prior to the game if present. This allows for adding environmental variables to the games without having to mess with any root owned files or desktop entries. Particularly, exports (such as Mesa debug environmental variables) and parameters for the game client can be added. For example:

echo "export PULSE_LATENCY_MSEC=100" > ~/snap/runescape/current/rs3-user-config

Users may pass the -h parameter ( e.g., runescape.rs3 -h ) to the launch scripts to see common overrides. These parameters will be preferred over any conflicting entries in the user-config files.

Build Instructions

The snap can be built on any Linux system with snapd installed.

For machines with virtual machine support, instructions should be roughly as follows.

sudo snap install snapcraft --classic
sudo snap install multipass
snapcraft
sudo snap install runescape_release.snap --dangerous

The dangerous flag is required to install any snap package that lacks signature verification, such as those built locally. It does not disable the sandboxing, and is dangerous in the sense the author is unknown (I.E, not me) rather than the snap has any specific dangerous properties. It is impossible to generate valid signatures for snaps without owning the package name on the Snap Store itself, so any unofficial builds will always require this flag, or require their package name be changed.

If your machine does not have VM support, try building with the LXD backend using the instructions here, follow the building with bases information.

General Info

Is this a third party client?

This snap is not a third party client, I do not have any interest in modifying any of the games features or providing any features that modify any gameplay mechanics or interactions, regardless of their implementation.

The game engines are unmodified from Jagex, they are simply run in a consistent environment, and that environment itself may have some tweaks to encourage the engines to work better, such as setting RAM limits in OSRS, setting default cache locations to not pollute $HOME, consistent OS libraries (Mesa, Java, etc), and various others.

It is a third party package, in the sense that Jagex are not publishing this snap.

How do I get in touch / report an issue?

Please use the Github issues functionality. If it's a problem that exists in the snap package and doesn't exist in the official package, I'm interested in knowing about it.

Please don't assume I might know about problems already. I've been on an extended break from the game and so at any given point it's possible this package doesn't work, and I'd need the communities help to alert me to it!

Historically, I used to check the RuneScape forums and subreddits rather vigorously to look out for issues. Unfortunately, this actually consumes a lot of time since it's looking for needles in haystacks, and in the ideal case, the needles don't exist. So unfortunately I've decided to stop doing it, please use Github issues :)!

OSRS C++ client

I'd like to package the newer C++ version of OSRS in the future. For now, it's impossible to package the Steam version because it would involve having to communicate with the Steam client for authentication. Jagex have commited to distributing a release outside of Steam, for Windows, which I can attempt to wrap in Proton/Wine when it releases. I have no idea to whether Jagex will release a Linux native version. If they do, I'll attempt to snap that and replace the Java client with it.

In general, I'll keep an eye out on what can be done as events unfold.

Can this project be trusted?

  • The main scripts powering the snap can be found at /snap/runescape/current/bin/ and are written in Bash, so what they do is plainly visible in every installation.

  • The downloads from Jagex are cryptographically verified by the snap. The snap itself is cryptographically verified by snapd itself, unless installed with the --dangerous flag.

  • The exact versions of installed packages are usually listed in /snap/runescape/current/snap/manifest.yaml, so they be inspected.

  • The production builds are usually done by Githubs own runners and can be viewed here.

  • Sandboxing is used where possible to isolate what this snap and the games can do. In the majority of scenarios, they can't even inspect your $HOME folder, though exact sandboxing depends on Linux distribution / patches. You can view what is allowed and control it via the snap CLI tools.

Why are the store reviews so bad?

Reviews in the majority of Linux app stores (Gnome Software/Discover/etc) are powered by the ODRS service. ODRS merges reviews from multiple package formats across multiple distributions.

Unfortunately, this means a significant amount of alternate RuneScape packages share the same comments and ratings as this snap. Many of these comments are older than the Snap itself. The RSU launcher, Debians' packages, the upstream official package from Jagex, and presumably various other packages are treated in this manner, with all their reviews being merged and shared.

It's impossible to leave responses to ask for more information or comment on any criticisms or bug reports submitted as a review. Because of this, I simply don't look at them because I cannot tell which package they relate to or respond at all.

Copyright

The snap does not contain Jagex code, and will dynamically fetch this from the Jagex servers on first run. This solves a lot of issues regarding the EULA of the games; I simply don't distribute them, but instead the environment they run in.

On the offchance you're a Jagex employee reading this and wish to get in touch, my email address can be found on my Github profile.

runescape-snap's People

Contributors

jgcarroll avatar

Stargazers

Joseph avatar  avatar Richard Gomez avatar Julio Cezar Lobo avatar Felipe Andrade avatar Alexander ADAM avatar Toon Schoenmakers avatar Jesus Pacheco avatar Tyler Ellis avatar Kevin Singh avatar Bryan Candiliere avatar

Watchers

Richard Gomez avatar  avatar

runescape-snap's Issues

lots of weird permissions errors

The following is what happens when trying to run.

Note that /tmp/ exists and is readable and writeable by everyone and /etc/wgetrc exists and is readable by anyone.

will@will-Inspiron-660:~$ /snap/bin/runescape.rs3

Couldn't find Jagex launcher, grabbing a fresh copy

Importing Jagex Signing key

gpg: key 7373B12CE03BEB4B: "RuneScape Linux [email protected]" not changed
gpg: Total number processed: 1
gpg: unchanged: 1

Downloading RuneScape repository info

Failed to Fopen file /etc/wgetrc
Failed to Fopen file /etc/wgetrc
wget: Cannot read /etc/wgetrc (Permission denied).
/tmp/Release: Permission denied

Downloading RuneScape repository info signature

Failed to Fopen file /etc/wgetrc
Failed to Fopen file /etc/wgetrc
wget: Cannot read /etc/wgetrc (Permission denied).
/tmp/Release.gpg: Permission denied
gpg: Signature made Thu Feb 11 06:18:37 2021 EST
gpg: using RSA key AAC9264309E4D717441DB9527373B12CE03BEB4B
gpg: Good signature from "RuneScape Linux [email protected]" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: AAC9 2643 09E4 D717 441D B952 7373 B12C E03B EB4B

Repository metadata successfully verified by GPG key

Downloading repository package list

Failed to Fopen file /etc/wgetrc
Failed to Fopen file /etc/wgetrc
wget: Cannot read /etc/wgetrc (Permission denied).
/tmp/Packages: Permission denied
Repository package list looks valid

Downloading RuneScape launcher

Failed to Fopen file /etc/wgetrc
Failed to Fopen file /etc/wgetrc
wget: Cannot read /etc/wgetrc (Permission denied).
/tmp/rs.deb: Permission denied

Launcher successfully verified by GPG key

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=C,Utf16=off,HugeFiles=on,64 bits,2 CPUs Intel(R) Pentium(R) CPU G2020 @ 2.90GHz (306A9),ASM)

Scanning the drive for archives:
1 file, 3869752 bytes (3780 KiB)

Extracting archive: /tmp/rs.deb

Path = /tmp/rs.deb
Type = Ar
Physical Size = 3869752
SubType = deb

Path = data.tar.xz
Size = 3861128
Modified = 2021-02-11 06:18:31
Mode = -rw-r--r--

Path = data.tar.xz
Type = xz
Physical Size = 3861128
Method = LZMA2:23 CRC64
Streams = 1
Blocks = 1

ERROR: Can not open output file : Permission denied : /tmp/data.tar/data.tar

Sub items Errors: 1

Archives with Errors: 1

Sub items Errors: 1

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=C,Utf16=off,HugeFiles=on,64 bits,2 CPUs Intel(R) Pentium(R) CPU G2020 @ 2.90GHz (306A9),ASM)

Scanning the drive for archives:

ERROR: Permission denied
/tmp/data.tar/

System ERROR:
Unknown error -2147024883
mv: cannot stat '/tmp/usr/share/games/runescape-launcher/runescape': Permission denied
chmod: cannot access '/home/will/snap/runescape/common/.launcher-2.2.8': No such file or directory

Setting RS3 cache location to /home/will/snap/runescape/common

The download process has failed unexpectedly. Please raise a Github issue, as this is likely a serious fault.
Warning: locale not supported by C library, locale unchanged

Fedora 32 Gnome 3 Runescape3 Fullscreen Issues

The use of the in-game 'Fullscreen Mode' setting causes Gnome to incorrectly display the window within the overview. Switching virtual desktops seems to 'minimize the window, and upon return to the virtual desktop Runescape was occupying it is not visible. When the overview is opened on that desktop, the display of the window is incorrect and stretches to the right of the display outside the normal bounds.

A temporary solution is to define a keyboard shortcut for making windows fullscreen within Gnome 3 itself and using that to bring the game into fullscreen. This fixes all apparent issues, other than some initial stuttering when switching back to a full-screen Runescape 3 session.

Java Dependency Issue (running on Ubuntu 22.04)

I don't imagine my Ubuntu version matters, since this is a snap, but anyway, since the most recent update attempting to run OSRS by calling runescape.osrs, produces this error:

Launching OSRS

Error occurred during initialization of VM
java.lang.ExceptionInInitializerError
	at sun.security.util.DisabledAlgorithmConstraints.jarConstraints([email protected]/DisabledAlgorithmConstraints.java:112)
	at sun.security.pkcs.SignerInfo.<clinit>([email protected]/SignerInfo.java:69)
	at sun.security.pkcs.PKCS7.parseSignedData([email protected]/PKCS7.java:391)
	at sun.security.pkcs.PKCS7.parse([email protected]/PKCS7.java:186)
	at sun.security.pkcs.PKCS7.parse([email protected]/PKCS7.java:154)
	at sun.security.pkcs.PKCS7.<init>([email protected]/PKCS7.java:136)
	at sun.security.util.SignatureFileVerifier.<init>([email protected]/SignatureFileVerifier.java:116)
	at java.util.jar.JarVerifier.processEntry([email protected]/JarVerifier.java:308)
	at java.util.jar.JarVerifier.update([email protected]/JarVerifier.java:239)
	at java.util.jar.JarFile.initializeVerifier([email protected]/JarFile.java:767)
	at java.util.jar.JarFile.ensureInitialization([email protected]/JarFile.java:1050)
	at java.util.jar.JavaUtilJarAccessImpl.ensureInitialization([email protected]/JavaUtilJarAccessImpl.java:69)
	at jdk.internal.loader.URLClassPath$JarLoader$2.getManifest([email protected]/URLClassPath.java:872)
	at jdk.internal.loader.BuiltinClassLoader.defineClass([email protected]/BuiltinClassLoader.java:786)
	at jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull([email protected]/BuiltinClassLoader.java:698)
	at jdk.internal.loader.BuiltinClassLoader.loadClassOrNull([email protected]/BuiltinClassLoader.java:621)
	at jdk.internal.loader.BuiltinClassLoader.loadClass([email protected]/BuiltinClassLoader.java:579)
	at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass([email protected]/ClassLoaders.java:178)
	at java.lang.ClassLoader.loadClass([email protected]/ClassLoader.java:522)
	at java.lang.Class.forName0([email protected]/Native Method)
	at java.lang.Class.forName([email protected]/Class.java:398)
	at java.lang.ClassLoader.initSystemClassLoader([email protected]/ClassLoader.java:1976)
	at java.lang.System.initPhase3([email protected]/System.java:2074)
Caused by: java.lang.IllegalStateException: getSystemClassLoader cannot be called during the system class loader instantiation
	at java.lang.ClassLoader.getSystemClassLoader([email protected]/ClassLoader.java:1932)
	at java.lang.ClassLoader.getSystemResources([email protected]/ClassLoader.java:1705)
	at java.util.ServiceLoader$LazyClassPathLookupIterator.nextProviderClass([email protected]/ServiceLoader.java:1186)
	at java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService([email protected]/ServiceLoader.java:1221)
	at java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext([email protected]/ServiceLoader.java:1265)
	at java.util.ServiceLoader$2.hasNext([email protected]/ServiceLoader.java:1300)
	at java.util.ServiceLoader$3.hasNext([email protected]/ServiceLoader.java:1385)
	at sun.util.cldr.CLDRLocaleProviderAdapter$1.run([email protected]/CLDRLocaleProviderAdapter.java:89)
	at sun.util.cldr.CLDRLocaleProviderAdapter$1.run([email protected]/CLDRLocaleProviderAdapter.java:86)
	at java.security.AccessController.doPrivileged([email protected]/Native Method)
	at sun.util.cldr.CLDRLocaleProviderAdapter.<init>([email protected]/CLDRLocaleProviderAdapter.java:86)
	at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0([email protected]/Native Method)
	at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance([email protected]/NativeConstructorAccessorImpl.java:62)
	at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance([email protected]/DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance([email protected]/Constructor.java:490)
	at java.lang.Class.newInstance([email protected]/Class.java:584)
	at sun.util.locale.provider.LocaleProviderAdapter.forType([email protected]/LocaleProviderAdapter.java:176)
	at sun.util.locale.provider.LocaleServiceProviderPool.findProviders([email protected]/LocaleServiceProviderPool.java:307)
	at sun.util.locale.provider.LocaleServiceProviderPool.getLocalizedObjectImpl([email protected]/LocaleServiceProviderPool.java:280)
	at sun.util.locale.provider.LocaleServiceProviderPool.getLocalizedObject([email protected]/LocaleServiceProviderPool.java:262)
	at sun.util.locale.provider.CalendarDataUtility.retrieveFirstDayOfWeek([email protected]/CalendarDataUtility.java:75)
	at java.util.Calendar.setWeekCountData([email protected]/Calendar.java:3414)
	at java.util.Calendar.<init>([email protected]/Calendar.java:1611)
	at java.util.GregorianCalendar.<init>([email protected]/GregorianCalendar.java:738)
	at java.util.Calendar$Builder.build([email protected]/Calendar.java:1493)
	at sun.security.util.DisabledAlgorithmConstraints$DenyAfterConstraint.<init>([email protected]/DisabledAlgorithmConstraints.java:707)
	at sun.security.util.DisabledAlgorithmConstraints$Constraints.<init>([email protected]/DisabledAlgorithmConstraints.java:419)
	at sun.security.util.DisabledAlgorithmConstraints.<init>([email protected]/DisabledAlgorithmConstraints.java:148)
	at sun.security.util.DisabledAlgorithmConstraints.<init>([email protected]/DisabledAlgorithmConstraints.java:122)
	at sun.security.util.DisabledAlgorithmConstraints$JarHolder.<clinit>([email protected]/DisabledAlgorithmConstraints.java:98)
	at sun.security.util.DisabledAlgorithmConstraints.jarConstraints([email protected]/DisabledAlgorithmConstraints.java:112)
	at sun.security.pkcs.SignerInfo.<clinit>([email protected]/SignerInfo.java:69)
	at sun.security.pkcs.PKCS7.parseSignedData([email protected]/PKCS7.java:391)
	at sun.security.pkcs.PKCS7.parse([email protected]/PKCS7.java:186)
	at sun.security.pkcs.PKCS7.parse([email protected]/PKCS7.java:154)
	at sun.security.pkcs.PKCS7.<init>([email protected]/PKCS7.java:136)
	at sun.security.util.SignatureFileVerifier.<init>([email protected]/SignatureFileVerifier.java:116)
	at java.util.jar.JarVerifier.processEntry([email protected]/JarVerifier.java:308)
	at java.util.jar.JarVerifier.update([email protected]/JarVerifier.java:239)
	at java.util.jar.JarFile.initializeVerifier([email protected]/JarFile.java:767)
	at java.util.jar.JarFile.ensureInitialization([email protected]/JarFile.java:1050)
	at java.util.jar.JavaUtilJarAccessImpl.ensureInitialization([email protected]/JavaUtilJarAccessImpl.java:69)
	at jdk.internal.loader.URLClassPath$JarLoader$2.getManifest([email protected]/URLClassPath.java:872)
	at jdk.internal.loader.BuiltinClassLoader.defineClass([email protected]/BuiltinClassLoader.java:786)
	at jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull([email protected]/BuiltinClassLoader.java:698)
	at jdk.internal.loader.BuiltinClassLoader.loadClassOrNull([email protected]/BuiltinClassLoader.java:621)
	at jdk.internal.loader.BuiltinClassLoader.loadClass([email protected]/BuiltinClassLoader.java:579)
	at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass([email protected]/ClassLoaders.java:178)
	at java.lang.ClassLoader.loadClass([email protected]/ClassLoader.java:522)
	at java.lang.Class.forName0([email protected]/Native Method)
	at java.lang.Class.forName([email protected]/Class.java:398)
	at java.lang.ClassLoader.initSystemClassLoader([email protected]/ClassLoader.java:1976)
	at java.lang.System.initPhase3([email protected]/System.java:2074)

No error occurs if you run runescape.rs3

Issue seems to have started 10 November 2022, but could have been any time that week.

RuneScape crashing after loading splash screen

Up until yesterday, RuneScape worked fine, but now it crashes after the splash screen finishes loading. When running via terminal, this is the output:

[invalidcards@onyx-linux ~]$ runescape.rs3

Launching RuneScape

Gtk-Message: 17:20:03.083: Failed to load module "canberra-gtk-module"
/home/invalidcards/snap/runescape/50/Jagex/launcher/rs2client: error while loading shared libraries: libOpenGL.so.0: cannot open shared object file: No such file or directory

No software packages on my system have updated since yesterday. Running on Manjaro Linux.

Language switching dose not work

Hi there,
i installed runescape using your snap, it workes fine thanks!. But unfortunattely i am unable to switch the language of the game to german. While loading i clicked on the cogs-icon, selegted Deutsch (german) and confirmed. after rebooting and clicking this icon again there was still Deutsch set correctly and this dialog was also in german language but the rest still remained english.

thanks a lot for fixing this in advance

keep up the good work

runescape.rs3 launch fails

I heard that there is an issue with the official RS3 client executable on Linux right now, is that the reason for this?

Description: Ubuntu Focal Fossa (development branch)
Release: 20.04
5.4.0-18-generic #22-Ubuntu SMP Sat Mar 7 18:13:06 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

RuneScape: 0+git.347723a 2020-03-25

Thank you.
rs3_crash.txt

PulseAudio Latency

Using export PULSE_LATENCY_MSEC=100 in the rs3-user-config file does not work as expected. The expected behaviour is for the effect to be applied for the first running instance of Runescape 3 upon a new session in the desktop environment.

The observed behaviour:

  1. With the configuration file already present, upon login the first launched instance of RS3 from the Gnome Overview, for example, does not have the proper latency and audio is corrupted;
  2. The following instances launched using Gnome do not correct the issue;
  3. Running runescape.rs3 from the terminal causes the configuration file to be found and read, but the first launched instance does not have the proper latency still.
  4. Running Runescape 3 from the command-line one more time then has the proper latency, and subsequently any instances launched from Gnome will also have the proper latency.

The configuration file, as documented:
cat ~/snap/runescape/current/rs3-user-config export PULSE_LATENCY_MSEC=100

Issue launching RS3 on Kali 2020.1

Whenever I go to run snap run runescape.rs3 I get this error:

snap run runescape.rs3
Launching RuneScape
Gtk-Message: 20:49:45.651: Failed to load module "gail"
Gtk-Message: 20:49:45.652: Failed to load module "atk-bridge"
Gtk-Message: 20:49:45.668: Failed to load module "canberra-gtk-module"
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
X Error:  GLXBadContext
  Request Major code 151 (GLX)
  Request Minor code 6 ()
  Error Serial #116
  Current Serial #115

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.