惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
宝玉的分享
宝玉的分享
月光博客
月光博客
小众软件
小众软件
Jina AI
Jina AI
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 【当耐特】
博客园 - 三生石上(FineUI控件)
博客园 - 司徒正美
大猫的无限游戏
大猫的无限游戏
The Cloudflare Blog
G
Google Developers Blog
M
MIT News - Artificial intelligence
N
Netflix TechBlog - Medium
云风的 BLOG
云风的 BLOG
MyScale Blog
MyScale Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
爱范儿
爱范儿
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Blog — PlanetScale
Blog — PlanetScale

Arch Linux Forums

Gnome desktop mouse cursor zoom issues / Newbie Corner Avidemux crashes without strace / Applications & Desktop Environments how to apply patches with non-linux linends / Newbie Corner Replicating CachyOS on vanilla Arch (or at least getting close) / Arch Discussion What's arch linux GUI package manager ? / Newbie Corner Hibernation failing due to insufficient memory / System Administration profiledef.sh editting question / Installation trying to script kde plasma wallpaper settings / Programming & Scripting Looking for new Audacious package maintainer / Creating & Modifying Packages issues installing arch with LUKS2 encryption / Newbie Corner QEMU PXE booting does not work with OVMF.4m.fd / Applications & Desktop Environments Wired lan regular disconnect / Newbie Corner Need Help setting up ARCH in my G16 G634JZR iwlwifi started failing consistently, trying to determine root cause Windows randomly jumping between monitors after GNOME 50 update No display via DP or HDMI after boot. / Kernel & Hardware how to change acpi platform_profile? / Newbie Corner Linux denied all kernel modules which not loaded right now Use iPhone as Webcam for Arch Linux Video Output Failure on nvidia-580xx-dkms on TTY --> Desktop switch (Page 2) / Kernel & Hardware I was going to rant ..WINE32 Sabotage compliments of Arvind Krishna / Arch Discussion [SOLVED] LUKS drive auto unlocked by TPM when expected not to / Networking, Server, and Protection Hibernate/suspend from X = dark panel; from TTY = works (ASUS G14, hyb (Page 2) / Laptop Issues Headphone jack noise/buzz / Newbie Corner segmentation fault in cc1plus when building CLK / AUR Issues, Discussion & PKGBUILD Requests Console alternative to meld / GNU/Linux Discussion Problem with paru git clone / Newbie Corner XKB questions / Applications & Desktop Environments gnome-keyring-daemon is not working correctly / Applications & Desktop Environments [SOLVED] Steam opens and immediately closes constantly / Newbie Corner
Problems with Worms WMD / Newbie Corner
LeRolls · 2026-06-03 · via Arch Linux Forums

The right libtheora is present in Steam Linux Runtime, you shouldn't need to manually download it:

$ find . | grep 'libtheora(enc|dec)\.so\.1$'
./steamapps/common/SteamLinuxRuntime_sniper/var/tmp-Y6UV92/usr/lib/x86_64-linux-gnu/libtheoraenc.so.1
./steamapps/common/SteamLinuxRuntime_sniper/var/tmp-Y6UV92/usr/lib/x86_64-linux-gnu/libtheoradec.so.1
./steamapps/common/SteamLinuxRuntime_sniper/var/tmp-Y6UV92/usr/lib/i386-linux-gnu/libtheoraenc.so.1
./steamapps/common/SteamLinuxRuntime_sniper/var/tmp-Y6UV92/usr/lib/i386-linux-gnu/libtheoradec.so.1
./steamapps/common/SteamLinuxRuntime_soldier/var/tmp-9J2S92/usr/lib/x86_64-linux-gnu/libtheoraenc.so.1
./steamapps/common/SteamLinuxRuntime_soldier/var/tmp-9J2S92/usr/lib/x86_64-linux-gnu/libtheoradec.so.1
./steamapps/common/SteamLinuxRuntime_soldier/var/tmp-9J2S92/usr/lib/i386-linux-gnu/libtheoraenc.so.1
./steamapps/common/SteamLinuxRuntime_soldier/var/tmp-9J2S92/usr/lib/i386-linux-gnu/libtheoradec.so.1
./ubuntu12_32/steam-runtime.old/usr/lib/x86_64-linux-gnu/libtheoraenc.so.1
./ubuntu12_32/steam-runtime.old/usr/lib/x86_64-linux-gnu/libtheoradec.so.1
./ubuntu12_32/steam-runtime.old/usr/lib/i386-linux-gnu/libtheoraenc.so.1
./ubuntu12_32/steam-runtime.old/usr/lib/i386-linux-gnu/libtheoradec.so.1
./ubuntu12_32/steam-runtime/usr/lib/x86_64-linux-gnu/libtheoraenc.so.1
./ubuntu12_32/steam-runtime/usr/lib/x86_64-linux-gnu/libtheoradec.so.1
./ubuntu12_32/steam-runtime/usr/lib/i386-linux-gnu/libtheoraenc.so.1
./ubuntu12_32/steam-runtime/usr/lib/i386-linux-gnu/libtheoradec.so.1

It should be enough to add the following to Run.sh (in the LD_PRELOAD section):

"$STEAM_RUNTIME"/usr/lib/x86_64-linux-gnu/libtheoradec.so.1 \
"$STEAM_RUNTIME"/usr/lib/x86_64-linux-gnu/libtheoraenc.so.1 \

However, if you want a cleaner setup, I suggest dropping Run.sh and instead running the game through Steam using the "Play Worms W.M.D" option.
Background: when using "Play Worms W.M.D (Run.sh)" (or when launching from the terminal), the game binary is launched directly, without steam-launch-wrapper, so Steam runtime's libraries are not loaded.
The Run.sh version from the wiki attempts to fix this by manually LD_PRELOAD-ing the needed libraries, but imo it's more robust to just let Steam do its job; as we can see, system library updates (like libtheora from 1.1.1 to 1.2.0) can break the script, and it will require regular updates to keep working.

Over the years of battling with running this game on Linux, I have come up with the following solution:

1. Add a script, e.g. "myrun.sh", to the game directory (and remember to make it executable):

#!/bin/bash

_libraries=(
	lib/libQt5*.so.5
	/usr/lib/libwavpack.so.1
	"$STEAM_RUNTIME"/amd64/lib/x86_64-linux-gnu/libdbus-1.so.3
)

export LD_PRELOAD="${_libraries[@]}"

exec "$@"

2. Add the following to the game's Launch Options in Steam:

3. Run the game through Steam using "Play Worms W.M.D" (not "Play Worms W.M.D (Run.sh)").

If there are any issues, you can replace the last line of the script with

exec "$@" >~/worms-stdout.log 2>~/worms-stderr.log

and then look at the log files to see what the problem is.

(You can also add the following at the top of the script:

echo "$@" >~/worms-steam-cmd.log

to see the Steam Runtime magic in action.)

Edit:
Just realized that some time ago multiplayer broke, and now it requires the following in LD_PRELOAD:

"$STEAM_RUNTIME"/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4
"$STEAM_RUNTIME"/usr/lib/x86_64-linux-gnu/libidn.so.11
"$STEAM_RUNTIME"/lib/x86_64-linux-gnu/libgcrypt.so.11
"$STEAM_RUNTIME"/usr/lib/x86_64-linux-gnu/librtmp.so.0

which largely defeats the advantage of being cleaner than manually preloading all libraries…

Last edited by stanczew (2025-07-20 19:53:35)