feat: Add auto-detection and integration for game performance wrappers like gamemoderun and game-performance.
This commit is contained in:
parent
95ec73df5c
commit
72c301be78
4 changed files with 45 additions and 3 deletions
2
PKGBUILD
2
PKGBUILD
|
|
@ -1,6 +1,6 @@
|
||||||
# Maintainer: Cosmo
|
# Maintainer: Cosmo
|
||||||
pkgname=xivlauncher-wrapper
|
pkgname=xivlauncher-wrapper
|
||||||
pkgver=0.1.0
|
pkgver=0.3.0
|
||||||
pkgrel=1
|
pkgrel=1
|
||||||
pkgdesc="Wrapper for XIVLauncher with OTP injection"
|
pkgdesc="Wrapper for XIVLauncher with OTP injection"
|
||||||
arch=('any')
|
arch=('any')
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ This is a wrapper script for Linux that launches `xivlauncher-core` (Native or F
|
||||||
- **OTP Injection**: Generates TOTP codes and sends them to the launcher's internal server.
|
- **OTP Injection**: Generates TOTP codes and sends them to the launcher's internal server.
|
||||||
- **URL Support**: Accepts standard Base32 secrets OR full `otpauth://` URLs (e.g. from QR codes).
|
- **URL Support**: Accepts standard Base32 secrets OR full `otpauth://` URLs (e.g. from QR codes).
|
||||||
- **Auto-Configuration**: Prompts to fix `launcher.ini` settings if they are incorrect.
|
- **Auto-Configuration**: Prompts to fix `launcher.ini` settings if they are incorrect.
|
||||||
|
- **Performance Optimization**: Automatically detects and integrates with `gamemoderun` or `game-performance` to optimize your game instance.
|
||||||
|
|
||||||
## Installation (Steam Deck / Linux Desktop)
|
## Installation (Steam Deck / Linux Desktop)
|
||||||
|
|
||||||
|
|
@ -42,8 +43,10 @@ The easiest way to install is using the provided installer script. This script w
|
||||||
cp config.example.json ~/.config/xivlauncher-wrapper/config.json
|
cp config.example.json ~/.config/xivlauncher-wrapper/config.json
|
||||||
nano ~/.config/xivlauncher-wrapper/config.json
|
nano ~/.config/xivlauncher-wrapper/config.json
|
||||||
```
|
```
|
||||||
* `secret`: Enter your TOTP secret key or `otpauth://` URL.
|
* `secret`: Enter your TOTP secret key or `otpauth://` URL (optional, defaults to secure system keyring).
|
||||||
* `launcher_cmd`: (Optional) The command to launch XIVLauncher. If omitted, the wrapper will auto-detect it.
|
* `launcher_cmd`: (Optional) The command to launch XIVLauncher. If omitted, the wrapper will auto-detect it.
|
||||||
|
* `use_gamemode`: (Optional) Set to `true` to launch using a game performance wrapper.
|
||||||
|
* `gamemode_cmd`: (Optional) The specific game performance utility to use (e.g., `"gamemoderun"` or `"game-performance"`).
|
||||||
|
|
||||||
2. **Make Executable:**
|
2. **Make Executable:**
|
||||||
```bash
|
```bash
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,6 @@
|
||||||
{
|
{
|
||||||
"launcher_cmd": "flatpak run dev.goats.xivlauncher"
|
"launcher_cmd": "flatpak run dev.goats.xivlauncher",
|
||||||
|
"secret": "",
|
||||||
|
"use_gamemode": false,
|
||||||
|
"gamemode_cmd": "gamemoderun"
|
||||||
}
|
}
|
||||||
36
wrapper.py
36
wrapper.py
|
|
@ -355,6 +355,30 @@ def main():
|
||||||
config['launcher_cmd'] = cmd
|
config['launcher_cmd'] = cmd
|
||||||
config_dirty = True
|
config_dirty = True
|
||||||
|
|
||||||
|
# 2.5 Auto-detect gamemode/game-performance
|
||||||
|
if "use_gamemode" not in config:
|
||||||
|
gamemode_cmd = None
|
||||||
|
if shutil.which("game-performance"):
|
||||||
|
gamemode_cmd = "game-performance"
|
||||||
|
elif shutil.which("gamemoderun"):
|
||||||
|
gamemode_cmd = "gamemoderun"
|
||||||
|
|
||||||
|
if gamemode_cmd:
|
||||||
|
print(f"\n'{gamemode_cmd}' was detected on your system.")
|
||||||
|
print("Would you like to enable it for XIVLauncher? This can improve game performance.")
|
||||||
|
try:
|
||||||
|
choice = input(f"Enable {gamemode_cmd}? [Y/n]: ").strip().lower()
|
||||||
|
except (EOFError, KeyboardInterrupt):
|
||||||
|
choice = 'n'
|
||||||
|
print("\nPrompt interrupted, defaulting to No.")
|
||||||
|
|
||||||
|
if choice in ('', 'y', 'yes'):
|
||||||
|
config["use_gamemode"] = True
|
||||||
|
config["gamemode_cmd"] = gamemode_cmd
|
||||||
|
else:
|
||||||
|
config["use_gamemode"] = False
|
||||||
|
config_dirty = True
|
||||||
|
|
||||||
# Save config if updated (e.g. launcher_cmd detected)
|
# Save config if updated (e.g. launcher_cmd detected)
|
||||||
if config_dirty:
|
if config_dirty:
|
||||||
try:
|
try:
|
||||||
|
|
@ -384,6 +408,18 @@ def main():
|
||||||
import shlex
|
import shlex
|
||||||
args = shlex.split(cmd)
|
args = shlex.split(cmd)
|
||||||
|
|
||||||
|
# Prepend gamemode wrapper if enabled
|
||||||
|
if config.get("use_gamemode"):
|
||||||
|
g_cmd = config.get("gamemode_cmd")
|
||||||
|
if not g_cmd:
|
||||||
|
if shutil.which("game-performance"):
|
||||||
|
g_cmd = "game-performance"
|
||||||
|
elif shutil.which("gamemoderun"):
|
||||||
|
g_cmd = "gamemoderun"
|
||||||
|
if g_cmd and shutil.which(g_cmd):
|
||||||
|
args.insert(0, g_cmd)
|
||||||
|
print(f"Using game performance wrapper: {g_cmd}")
|
||||||
|
|
||||||
# Inject XL_SECRET_PROVIDER=file environment variable
|
# Inject XL_SECRET_PROVIDER=file environment variable
|
||||||
env = os.environ.copy()
|
env = os.environ.copy()
|
||||||
env['XL_SECRET_PROVIDER'] = 'file'
|
env['XL_SECRET_PROVIDER'] = 'file'
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue