Adamcake/Bolt

Request to update documentation to include fixes for known issues.

Closed this issue · 12 comments

I am using Bolt on Arch Linux to play OSRS with RuneLite.

I have been troubleshooting an audio-related issue. This issue seems to be affecting some RuneLite Linux users. I found a solution to this issue mentioned here

I'm not very familiar with the inner workers on java relating to the --configure option that is mentioned in that solution. Although, I was able to confirm, that JVM options that are added via the java --configure option do not apply to instances of runelite that are started through the Bolt Launcher.

I suspect this is due to the fact the Bolt Launcher sets its own JAVA HOME, but unsure.

As I was able to confirm that adding those JVM options to the execution of the RuneLite.jar from outside of Bolt Launcher resolved the "no sound" issue for myself. As the JVM options applied via --configure did not apply to instances of RuneLite.jar that was launched through the Bolt Launcher, the temporary solution that I was able to implement is as follows.

  1. Execute java -jar RuneLite.jar --configure and add the following options to the JVM section:
-Djavax.sound.sampled.Clip=com.sun.media.sound.DirectAudioDeviceProvider
-Djavax.sound.sampled.Port=com.sun.media.sound.PortMixerProvider
-Djavax.sound.sampled.SourceDataLine=com.sun.media.sound.DirectAudioDeviceProvider
-Djavax.sound.sampled.TargetDataLine=com.sun.media.sound.DirectAudioDeviceProvider
  1. Unmute the login screen music and see if this fixes the "no sound" issue, if it does, then proceed to the next steps.
  2. execute archlinux-java get and make note of the java version from the output.
  3. (as root) cd /usr/lib/jvm/<JAVA_VERSION>/bin
  4. (as root) mv ./java ./java-real
  5. (as root) vim ./java and populate it with the following:
#!/bin/bash

echo "$*" | grep -i "\ runelite.jar"

arguments=$(echo "$*" | sed "s/net\.runelite\.client\.RuneLite//g")

if [ "$?" -eq 0 ]; then
        java-real $arguments -Djavax.sound.sampled.Clip=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.Port=com.sun.media.sound.PortMixerProvider -Djavax.sound.sampled.SourceDataLine=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.TargetDataLine=com.sun.media.sound.DirectAudioDeviceProvider net.runelite.client.RuneLite
else
        java-real $*
fi

7.(as root) chmod a+x ./java
8. attempt launching RuneLite through the Bolt Launcher.

Notes:
I recognize this solution isn't ideal for several reasons and should only function as a temporary "fix" until the downstream issue with alsa/java/runelite is resolved. Although its not an issue with Bolt Launcher itself, given the current working fix for this issue is a sub par solution, as you have to replace the java binary with a "helper" bash script that intercepts and modifies usage of the java command specifically when used for the RuneLite.jar. This can present issues as if java is updated, or you switch java versions, the solution will stop functioning, additionally, this solution may have an unidentified issue that leads to the execution of other java applications being affected.

With that in mind, below are the instructions for how to "undo" the changes.

(as root)

  1. cd /usr/lib/jvm/<JAVA VERSION>/bin
  2. mv ./java-real ./java
  3. chmod a+x ./java

and if you need to completely reinstall java, please refer to your distributions instructions for that matter.

I tried using _JAVA_OPTIONS without luck.

This Runelite issue thread, mentions configuring the Runelite JAR with the same options but that doesn't fix it for me either, even if I tell bolt to use that as a custom Runelite JAR. I am not privy to the inner (or outer tbh) workings of Java so I'm definitely missing something 🙃.

I haven't tried @EspressoKyle's bash wrapper script solution.

An extra wrinkle in this situation is that runelite.jar is actually just a launcher, which downloads all the latest runelite binaries and runs them by starting up a totally separate JVM. So passing command-line options to the launcher's JVM doesn't configure the actual game client's JVM... but you can do that by using runelite's -J option to pass through args.

java --some-jvm-arg -jar runelite.jar -J--some-jvm-arg
Here the first configures the launcher and the second configures the game. The arguments do need to be in exactly this order: JVM args before the JAR, and -J args after it.

I have no idea how this is represented in the --configure menu though.

@deejcunningham

I tried using _JAVA_OPTIONS without luck.

I haven't tried updating my _JAVA_OPTIONS env variable so I am not able to confirm myself yet. But, I would think that should of worked. How environment variables are applied in Linux can be a bit non-intuitive. Please attempt the following and report back if possible.

1 - Remove mentions of _JAVA_OPTIONS from the following files (assuming your default shell is Bash (/bin/bash).

  1. /etc/environment
  2. /etc/profile
  3. $HOME/.profile
  4. $HOME/.bash_profile
  5. $HOME/.bash_login
  6. $HOME/.bashrc

2 - Have the environment variable exported at session start

add...
export _JAVA_OPTIONS="-Djavax.sound.sampled.Clip=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.Port=com.sun.media.sound.PortMixerProvider -Djavax.sound.sampled.SourceDataLine=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.TargetDataLine=com.sun.media.sound.DirectAudioDeviceProvider"
... to $HOME/.profile

3 - Restart your display manager

How to restart your display manager is different depending on if your system uses Systemd or Sysctl and which display manager that you are using (GDM, LightDM, etc).
If you know how to restart your display manager, then do that, otherwise just reboot your device.

4 - open a terminal and execute echo $_JAVA_OPTIONS to confirm that the environment variable is set and exported.

5 - Launch Bolt Launcher and test to see if the issue is resolved.

This Runelite issue runelite/runelite#3525 (comment), mentions configuring >the Runelite JAR with the same options but that doesn't fix it for me either, even if I tell bolt to use that as a custom >Runelite JAR. I am not privy to the inner (or outer tbh) workings of Java so I'm definitely missing something 🙃.

I haven't tried @EspressoKyle's bash wrapper script solution.

During my original testing before I created the mentioned helper script, I also tried using the --configure option on a separately downloaded Runelite Jar file and then I executed java -jar ./Runelite.jar --configure prior to configuring bolt to use that specific jar file (to see if the JVM options that I configured in the --configure dialog would also apply to jar files that were ran through Bolt Launcher. Sadly, the JVM options that I specified in the --configure only applied when I ran that specific runelite jar directly with java -jar ./Runelite.jar. But, it didn't apply to that same RuneLite jar being started by the Bolt Launcher.

I was able to provide definitive confirmation that any JVM options configured using --configure will not apply to the RuneLite.jar file executed by Bolt Launcher doing the following:

  1. I configured the helper script that I created to replace the java executable only add the --configure option when the java command is executed and Runelite.jar is mentioned in the command line arguments ("$*" in bash).
  2. When I started the RuneLite Jar through the bolt launcher, the --configure dialog opened and the JVM Options section was blank. Following that, I re-executed java -jar ./Runelite.jar --configure and confirmed that the settings that I configured in the JVM Options section were still present while running the runelite.jar directly (not using Bolt Launcher).

The above confirmed my suspicions that the JVM options configured using the --configure option were not being applied when the Runelite.jar was started by the Bolt Launcher.


An extra wrinkle in this situation is that runelite.jar is actually just a launcher, which downloads all the latest runelite binaries and runs them by starting up a totally separate JVM. So passing command-line options to the launcher's JVM doesn't configure the actual game client's JVM... but you can do that by using runelite's -J option to pass through args.

java --some-jvm-arg -jar runelite.jar -J--some-jvm-arg Here the first configures the launcher and the second configures the game. The arguments do need to be in exactly this order: JVM args before the JAR, and -J args after it.

I have no idea how this is represented in the --configure menu though.

@Adamcake

additional information

Regarding your thinking that the JVM options that are applied to the parent RuneLite.jar file wouldn't be applied the the subsequently downloaded jar files.

This was intriguing to me as the helper script that I wrote should only inject those mentioned JVM options into instances where the java command is used in combination with (case insensitive) runelite.jar is also used.

Thus, I performed some further testing by modifying my helper script to capture exactly what uses of the java command the JVM Options were being injected into. Here is the modified helper script with an additional line to log any commands that my script is injecting those JVM options into, also log that entire command to a file. With this, we can see the entirety of any commands that are being passed the JVM options through my helper script.

Modified helper script:

#!/bin/bash

echo "$*" | grep -iE "\ ('runelite.jar'|'hdos.jar')"

arguments=$(echo "$*" | sed "s/net\.runelite\.client\.RuneLite//g")

if [ "$?" -eq 0 ]; then
        echo "java2 $arguments -Djavax.sound.sampled.Clip=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.Port=com.sun.media.sound.PortMixerProvider -Djavax.sound.sampled.SourceDataLine=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.TargetDataLine=com.sun.media.sound.DirectAudioDeviceProvider net.runelite.client.RuneLite" | tee -a ~yooblie/tmp.txt
        java2 $arguments -Djavax.sound.sampled.Clip=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.Port=com.sun.media.sound.PortMixerProvider -Djavax.sound.sampled.SourceDataLine=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.TargetDataLine=com.sun.media.sound.DirectAudioDeviceProvider net.runelite.client.RuneLite
else
        java2 $*
fi

Here is the findings:

My helper script injected the mentioned JVM options into two different commands that were both executed following pressing the "Runelite" button within the Bolt Launcher.

Command #1

java2 -Duser.home=/home/yooblie/.local/share/bolt-launcher -jar /home/yooblie/.local/share/bolt-launcher/runelite.jar -J-Duser.home=/home/yooblie/.local/share/bolt-launcher -Djavax.sound.sampled.Clip=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.Port=com.sun.media.sound.PortMixerProvider -Djavax.sound.sampled.SourceDataLine=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.TargetDataLine=com.sun.media.sound.DirectAudioDeviceProvider net.runelite.client.RuneLite

Command #2

java2 -cp /home/yooblie/.local/share/bolt-launcher/.runelite/repository2/client-1.10.21.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/slf4j-api-1.7.25.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/logback-classic-1.2.9.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/logback-core-1.2.9.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/jopt-simple-5.0.1.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/guava-23.2-jre.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/guice-4.1.0-no_aop.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/javax.inject-1.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/aopalliance-1.0.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/gson-2.8.5.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/flatlaf-3.2.5-rl2.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/commons-text-1.2.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/commons-lang3-3.7.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/archive-patcher-applier-1.2.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/jna-5.9.0.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/jna-platform-5.9.0.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/jsr305-3.0.2.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/protobuf-javalite-3.21.12.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/rlawt-1.4.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/lwjgl-3.3.2.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/lwjgl-3.3.2-natives-linux.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/lwjgl-opengl-3.3.2.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/lwjgl-opengl-3.3.2-natives-linux.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/lwjgl-opencl-3.3.2.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/client-patch-1.10.21.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/http-api-1.2.12.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/okhttp-3.14.9.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/okio-1.17.2.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/discord-1.4.jar:/home/yooblie/.local/share/bolt-launcher/.runelite/repository2/runelite-api-1.10.21-runtime.jar -XX:+DisableAttachMechanism -Xmx768m -Xss2m -XX:CompileThreshold=1500 -Dsun.java2d.opengl=false -Drunelite.launcher.version=2.6.13 -XX:ErrorFile=/home/yooblie/.local/share/bolt-launcher/.runelite/logs/jvm_crash_pid_%p.log -Duser.home=/home/yooblie/.local/share/bolt-launcher  -Djavax.sound.sampled.Clip=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.Port=com.sun.media.sound.PortMixerProvider -Djavax.sound.sampled.SourceDataLine=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.TargetDataLine=com.sun.media.sound.DirectAudioDeviceProvider  -Djavax.sound.sampled.Clip=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.Port=com.sun.media.sound.PortMixerProvider -Djavax.sound.sampled.SourceDataLine=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.TargetDataLine=com.sun.media.sound.DirectAudioDeviceProvider net.runelite.client.RuneLite

Bolt version 0.8.2 is out on AUR and has a "Configure RuneLite" launch option which launches with --configure. I'd appreciate one of you confirming that it works correctly.

Regarding your helper script, command 2 is definitely the parent process spawning the child process. So your helper script is intercepting that somehow.

@Adamcake That doesn't seem to have done the trick for me ☹️

I used the new "Configure RuneLite" button to set the JVM args however, I am still having the same sound issue(s). No sound output from RuneLite if I have other sound playing when it starts up. If I have no other sound playing when starting RuneLite, then RL sound works, but no other sounds will as long as RL is running.

Here's the full output from `bolt`:
[dj@saturn ~]$ bolt
[0205/214858.679010:WARNING:chrome_browser_cloud_management_controller.cc(87)] Could not create policy manager as CBCM is not enabled.
[0205/214858.680086:ERROR:object_proxy.cc(590)] Failed to call method: org.freedesktop.DBus.Properties.Get: object_path= /org/freedesktop/portal/desktop: org.freedesktop.DBus.Error.InvalidArgs: No such interface “org.freedesktop.portal.FileChooser”
[0205/214858.680101:WARNING:property.cc(144)] version: GetAndBlock: failed.
[0205/214858.680114:ERROR:select_file_dialog_linux_portal.cc(274)] Failed to read portal version property
[B] OnContextInitialized
[B] Browser::Window popup constructor, this=96963645027232
[B] OnWindowCreated 0 this=96963645027232
[B] OnAfterCreated for browser 1
[B] OnBrowserCreated this=96963645027232 1
[R] OnBrowserCreated for browser 1
[0205/214858.818447:WARNING:sandbox_linux.cc(393)] InitializeSandbox() called with multiple threads in process gpu-process.
[R] OnLoadEnd for browser 1
[0205/214858.911722:ERROR:ev_root_ca_metadata.cc(161)] Failed to decode OID: 0
[B] runelite temp_dir: /run/user/1000/bolt-runelite-CzeL0g
[B] Successfully spawned game process with pid 21023
Picked up _JAVA_OPTIONS: -Djavax.sound.sampled.Clip=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.Port=com.sun.media.sound.PortMixerProvider -Djavax.sound.sampled.SourceDataLine=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.TargetDataLine=com.sun.media.sound.DirectAudioDeviceProvider
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - RuneLite Launcher version 2.6.13
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Launcher configuration:
 debug: false
 nodiffs: false
 skip tls verification: false
 noupdates: false
 safe mode: false
 scale: system
 client arguments: none
 jvm arguments: [-Duser.home=/home/dj/.local/share/bolt-launcher]
 hardware acceleration mode: AUTO
 launch mode: AUTO
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - OS name: Linux, version: 6.7.3-arch1-1, arch: amd64
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Using hardware acceleration mode: OFF
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of client-1.10.21.1.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of slf4j-api-1.7.25.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of logback-classic-1.2.9.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of logback-core-1.2.9.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of jopt-simple-5.0.1.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of guava-23.2-jre.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of guice-4.1.0-no_aop.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of javax.inject-1.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of aopalliance-1.0.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of gson-2.8.5.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of flatlaf-3.2.5-rl4.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of commons-text-1.2.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of commons-lang3-3.7.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of archive-patcher-applier-1.2.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of jna-5.9.0.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of jna-platform-5.9.0.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of jsr305-3.0.2.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of protobuf-javalite-3.21.12.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of rlawt-1.4.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of lwjgl-3.3.2.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of lwjgl-3.3.2-natives-linux.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of lwjgl-opengl-3.3.2.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of lwjgl-opengl-3.3.2-natives-linux.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of lwjgl-opencl-3.3.2.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of client-patch-1.10.21.1.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of http-api-1.2.12.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of okhttp-3.14.9.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of okio-1.17.2.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of discord-1.4.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.Launcher - Verified hash of runelite-api-1.10.21.1-runtime.jar
2024-02-05 21:49:01 CST [main] INFO  net.runelite.launcher.JvmLauncher - Running [/usr/lib/jvm/java-21-openjdk/bin/java, -cp, /home/dj/.local/share/bolt-launcher/.runelite/repository2/client-1.10.21.1.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/slf4j-api-1.7.25.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/logback-classic-1.2.9.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/logback-core-1.2.9.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/jopt-simple-5.0.1.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/guava-23.2-jre.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/guice-4.1.0-no_aop.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/javax.inject-1.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/aopalliance-1.0.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/gson-2.8.5.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/flatlaf-3.2.5-rl4.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/commons-text-1.2.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/commons-lang3-3.7.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/archive-patcher-applier-1.2.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/jna-5.9.0.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/jna-platform-5.9.0.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/jsr305-3.0.2.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/protobuf-javalite-3.21.12.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/rlawt-1.4.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/lwjgl-3.3.2.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/lwjgl-3.3.2-natives-linux.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/lwjgl-opengl-3.3.2.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/lwjgl-opengl-3.3.2-natives-linux.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/lwjgl-opencl-3.3.2.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/client-patch-1.10.21.1.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/http-api-1.2.12.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/okhttp-3.14.9.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/okio-1.17.2.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/discord-1.4.jar:/home/dj/.local/share/bolt-launcher/.runelite/repository2/runelite-api-1.10.21.1-runtime.jar, -XX:+DisableAttachMechanism, -Xmx768m, -Xss2m, -XX:CompileThreshold=1500, -Dsun.java2d.opengl=false, -Drunelite.launcher.version=2.6.13, -XX:ErrorFile=/home/dj/.local/share/bolt-launcher/.runelite/logs/jvm_crash_pid_%p.log, -Duser.home=/home/dj/.local/share/bolt-launcher, net.runelite.client.RuneLite]
Picked up _JAVA_OPTIONS: -Djavax.sound.sampled.Clip=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.Port=com.sun.media.sound.PortMixerProvider -Djavax.sound.sampled.SourceDataLine=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.TargetDataLine=com.sun.media.sound.DirectAudioDeviceProvider
2024-02-05 21:49:02 CST [main] INFO  net.runelite.client.RuneLite - RuneLite 1.10.21.1 (launcher version 2.6.13) starting up, args: none
2024-02-05 21:49:02 CST [main] INFO  net.runelite.client.RuneLite - Java VM arguments: -XX:+DisableAttachMechanism -Xmx768m -Xss2m -XX:CompileThreshold=1500 -Dsun.java2d.opengl=false -Drunelite.launcher.version=2.6.13 -XX:ErrorFile=/home/dj/.local/share/bolt-launcher/.runelite/logs/jvm_crash_pid_%p.log -Duser.home=/home/dj/.local/share/bolt-launcher -Djavax.sound.sampled.Clip=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.Port=com.sun.media.sound.PortMixerProvider -Djavax.sound.sampled.SourceDataLine=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.TargetDataLine=com.sun.media.sound.DirectAudioDeviceProvider
2024-02-05 21:49:03 CST [Preloader] INFO  net.runelite.client.rs.ClientLoader - Using cached vanilla client
2024-02-05 21:49:03 CST [Preloader] INFO  net.runelite.client.rs.ClientLoader - Using cached patched client
2024-02-05 21:49:03 CST [Preloader] INFO  net.runelite.client.rs.ClientLoader - client-patch 7748025345.32
2024-02-05 21:49:04 CST [main] INFO  n.r.client.config.ConfigManager - Profile 'default' (sync: false, active: false, id: 82806549596302)
2024-02-05 21:49:04 CST [main] INFO  n.r.client.config.ConfigManager - Profile 'tethys profile' (sync: true, active: true, id: 0)
2024-02-05 21:49:04 CST [main] INFO  n.r.client.config.ConfigManager - Using profile: tethys profile (0)
2024-02-05 21:49:04 CST [main] INFO  n.r.client.config.ConfigManager - Profile 'tethys profile' is up to date
2024-02-05 21:49:04 CST [main] INFO  n.r.client.config.ConfigManager - Profile '$rsprofile' is up to date
2024-02-05 21:49:04 CST [main] INFO  n.r.c.plugins.kourendlibrary.Library - Library is now reset
2024-02-05 21:49:04 CST [main] INFO  n.r.c.e.ExternalPluginManager - Loading external plugin "coal-bag" jar "2HYnzLZCeLHkTwR235UGhpb87L0WgrXE4qEFKp7yOMU"
2024-02-05 21:49:04 CST [main] INFO  n.r.c.e.ExternalPluginManager - Loading external plugin "bot-detector" jar "NL-rB_x8bFwRJ9mVHBhDfDTPsi04K0UXRt_zb9bkw8I"
2024-02-05 21:49:04 CST [main] INFO  n.r.c.e.ExternalPluginManager - Loading external plugin "equipment-inspector" jar "peqLqTdOG-GR-F7i-FE-m84ifJeFcAs6WL1-_IaqM1k"
2024-02-05 21:49:04 CST [main] INFO  n.r.c.e.ExternalPluginManager - Loading external plugin "shooting-stars" jar "vDhNMTSOK7cVWvuicqiW8kBfkcWXQK4mUia3EeCGw3k"
2024-02-05 21:49:04 CST [main] INFO  n.r.c.e.ExternalPluginManager - Loading external plugin "dps-calculator" jar "0SKaWpNpQ7H_9EfyeQO9fdarwohqe1nCzMoXlf-AEfU"
2024-02-05 21:49:04 CST [main] INFO  n.r.c.e.ExternalPluginManager - Loading external plugin "cannon-be-gone" jar "_PZSgh5M-r26tPdgwwCSflde13WQ0-0BQs1ozsXqr3w"
2024-02-05 21:49:04 CST [main] INFO  n.r.c.e.ExternalPluginManager - Loading external plugin "time-tracking-reminder" jar "wsW9mW1_OnYIoaA7Y2-ULv6wCdxopXrKi23ubmokRSE"
2024-02-05 21:49:04 CST [main] INFO  n.r.c.e.ExternalPluginManager - Loading external plugin "pet-info" jar "eXYwL1IyqOkY0cxU3lvWKU5pVYmU7R3079ZAPvWwJNU"
2024-02-05 21:49:04 CST [main] INFO  n.r.c.e.ExternalPluginManager - Loading external plugin "fish-barrel" jar "JTqJcmHGGdjZLG_ki3fztNA8TWkUIF7dATHhKjdzxr8"
2024-02-05 21:49:04 CST [main] INFO  n.r.c.e.ExternalPluginManager - Loading external plugin "rogues-den" jar "RHDQlkrLjh8HnyXXzznZZp98v7HzLOWsTjkz3B3vv4A"
2024-02-05 21:49:04 CST [main] INFO  n.r.c.e.ExternalPluginManager - Loading external plugin "spamfilter" jar "AFHXKOtk90S6gOnUcnBN2jhGpjLZfDMFFG4Uxx5w590"
2024-02-05 21:49:04 CST [main] INFO  n.r.c.e.ExternalPluginManager - Loading external plugin "wikisync" jar "GshzSpu__sds4McNFluEqNJr2gOxlsLJEnLRP4OBVaM"
2024-02-05 21:49:04 CST [main] INFO  n.r.c.e.ExternalPluginManager - Loading external plugin "mahogany-homes" jar "vhdwWFo6T-VnQZRYjzIVCmAmSasrJ1y4ngkmHMq504U"
2024-02-05 21:49:04 CST [main] INFO  n.r.c.e.ExternalPluginManager - Loading external plugin "startierindicator" jar "fKI3lBanXHew744xYUjUHwS_LYGol710pPgmSX1huBY"
2024-02-05 21:49:04 CST [main] INFO  n.r.c.e.ExternalPluginManager - Loading external plugin "gp-per-hour" jar "n8dSbjbteOk0A2IgrgzoeV0bydFR5cM7ta3wiVdxEvM"
2024-02-05 21:49:04 CST [main] INFO  n.r.c.e.ExternalPluginManager - Loading external plugin "stealing-artefacts" jar "GErQN5O6KjWXqajgHyChIHJH5S5aOlzxAQMH3NjQQ1U"
2024-02-05 21:49:04 CST [main] INFO  n.r.c.e.ExternalPluginManager - Loading external plugin "boredgenerator" jar "G_FDAEjVi2K3DUVSozmlDLGPMF4miigm-fTffrdVLs0"
2024-02-05 21:49:04 CST [main] INFO  n.r.client.discord.DiscordService - Initializing Discord RPC service.
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
2024-02-05 21:49:05 CST [AWT-EventQueue-0] INFO  c.j.spamfilter.SpamFilterPlugin - Loaded built-in corpus files with 1126 (g) & 1584 (b) entries
2024-02-05 21:49:05 CST [AWT-EventQueue-0] INFO  c.j.spamfilter.SpamFilterPlugin - Loaded user corpus files with 0 (g) & 0 (b) entries
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
2024-02-05 21:49:05 CST [main] INFO  net.runelite.client.RuneLite - Client initialization took 3422ms. Uptime: 3886ms
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links
[LWJGL] [ThreadLocalUtil] Unsupported JNI version detected, this may result in a crash. Please inform LWJGL developers.
2024-02-05 21:49:05 CST [Client] INFO  n.r.client.plugins.gpu.GpuPlugin - Using device: AMD Radeon RX 6800 XT (radeonsi, navi21, LLVM 16.0.6, DRM 3.57, 6.7.3-arch1-1)
2024-02-05 21:49:05 CST [Client] INFO  n.r.client.plugins.gpu.GpuPlugin - Using driver: 4.6 (Compatibility Profile) Mesa 23.3.5-arch1.1

Looks like Bolt is picking up my _JAVA_OPTIONS env var, but I'm not sure about the config from the new button? This line seems to indicate that it's getting picked up tho: 2024-02-05 21:49:02 CST [main] INFO net.runelite.client.RuneLite - Java VM arguments: -XX:+DisableAttachMechanism -Xmx768m -Xss2m -XX:CompileThreshold=1500 -Dsun.java2d.opengl=false -Drunelite.launcher.version=2.6.13 -XX:ErrorFile=/home/dj/.local/share/bolt-launcher/.runelite/logs/jvm_crash_pid_%p.log -Duser.home=/home/dj/.local/share/bolt-launcher -Djavax.sound.sampled.Clip=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.Port=com.sun.media.sound.PortMixerProvider -Djavax.sound.sampled.SourceDataLine=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.TargetDataLine=com.sun.media.sound.DirectAudioDeviceProvider.

The repeated Failed to create secure directory (/run/user/1000/bolt-runelite-CzeL0g/pulse): Too many levels of symbolic links seem related to the audio issue, but I'm not sure what's expected there. It does seem strange to me that the bolt-runelite-CzeL0g/ dir contains a circular symlink to itself, but the pulse/ dir doesn't, and (again) I don't know what's expected.

That's the same issue as #12. I should really add this to the readme.

My Arch Linux laptop still has this issue, in a few hours I can remove the helper script so that it is back to being a standard java install, and then I will test it for you.

@Adamcake thank you for taking the time to make that update. I appreciate it :)

Please confirm this issue still happens after setting PULSE_RUNTIME_PATH as described in #12?

@Adamcake Seems like adding PULSE_RUNTIME_PATH did the trick for me. I also tested removing my _JAVA_OPTIONS env as well as the RuneLite JVM configuration args and it seems like I only need the PULSE_RUNTIME_PATH.

One specific note for my setup: I originally added these env vars to ~/.bashrc, but when launching bolt via dmenu the sound issue persisted. This is because dmenu isn't a login shell so I added them to /etc/environment per the Arch wiki.

Thanks a lot for all your assistance @Adamcake!

All of this family of issues should be fixed absolutely for good in 0.9.