Skip to content

Commit 0978a81

Browse files
Merge pull request #36 from pythonlover02/next
Release 1.3.0
2 parents 6d4a9ab + b0125ab commit 0978a81

26 files changed

+1601
-1280
lines changed

README.md

Lines changed: 59 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
# volt-gui:
1+
# volt-gui
22

3-
A graphical user interface for configuring GPU related environment variables and more for Linux gaming. Originally designed just for me and my friends, but seeing that it could be useful for other Linux users i have decided to Open Source it.
3+
> **My AMD Adrenaline / NVIDIA Settings Linux Alternative**
4+
5+
A graphical interface for configuring GPU, CPU, Disk, and Kernel performance settings for Linux gaming. Initially made for personal use, now open-sourced so others can benefit from it too.
46

57
![Badge Language](https://img.shields.io/github/languages/top/pythonlover02/volt-gui)
68
[![Stars](https://img.shields.io/github/stars/pythonlover02/volt-gui?style=social)](https://github.com/pythonlover02/volt-gui/stargazers)
@@ -23,90 +25,38 @@ A graphical user interface for configuring GPU related environment variables and
2325

2426
## What you can do?:
2527

26-
- CPU Management
27-
- Governor Selection: Choose from available CPU governors
28+
### CPU Management:
29+
- Governor Selection: Choose from available CPU governors.
2830
- Adjust the maximum and minimum CPU frequencies within the permitted range.
29-
- Scheduler Configuration: Select CPU pluggable schedulers (requires [scx](https://github.com/sched-ext/scx) and `Linux Kernel >= 6.12` or a `Custom Patched Kernel`)
30-
- GPU Configuration
31-
- Mesa Drivers: Configure Mesa Drivers specific environment variables
32-
- NVIDIA Drivers: Configure NVIDIA Proprietary Drivers specific environment variables
33-
- Render Selection: Choose the renderers for both OpenGL and Vulkan applications
34-
- Set a frame limit for both OpenGL and Vulkan applications, Texture Filters and MidMap LOD Bias for Vulkan only (requires [mangohud](https://github.com/flightlessmango/MangoHud))
35-
- All those GPU settings will be added to the `volt` script
36-
- Disk Configuration
31+
- Scheduler Configuration: Select, start and stop CPU pluggable schedulers (requires [scx](https://github.com/sched-ext/scx) and `Linux Kernel >= 6.12` or a `Custom Patched Kernel`).
32+
### GPU Configuration:
33+
- Mesa Drivers: Configure Mesa Drivers specific environment variables.
34+
- NVIDIA Drivers: Configure NVIDIA Proprietary Drivers specific environment variables.
35+
- Dynamic Render Selection: Select renderers for both OpenGL and Vulkan applications. The program dynamically sets the required environment variables depending on your GPU.
36+
- Configure various MangoHud options.
37+
- Configure lsfg-vk settings
38+
- All GPU settings are automatically added to the `volt` script.
39+
### Disk Configuration:
3740
- Change Disks Schedulers
38-
- Kernel Configuration
39-
- Choose /proc/sys/vm/compaction_proactiveness value
40-
- Choose /proc/sys/vm/watermark_boost_factor value
41-
- Choose /proc/sys/vm/watermark_scale_factor value
42-
- Choose /proc/sys/vm/extfrag_threshold value
43-
- Choose /proc/sys/vm/compact_unevictable_allowed value
44-
- Choose /proc/sys/vm/defrag_mode value
45-
- Choose /proc/sys/vm/min_free_kbytes value
46-
- Choose /proc/sys/vm/overcommit_memory value
47-
- Choose /proc/sys/vm/overcommit_ratio value
48-
- Choose /proc/sys/vm/admin_reserve_kbytes value
49-
- Choose /proc/sys/vm/user_reserve_kbytes value
50-
- Choose /proc/sys/vm/max_map_count value
51-
- Choose /proc/sys/vm/mmap_min_addr value
52-
- Choose /proc/sys/vm/page_lock_unfairness value
53-
- Choose /proc/sys/vm/swappiness value
54-
- Choose /proc/sys/vm/page-cluster value
55-
- Choose /proc/sys/vm/vfs_cache_pressure value
56-
- Choose /proc/sys/vm/percpu_pagelist_high_fraction value
57-
- Choose /proc/sys/vm/zone_reclaim_mode value
58-
- Choose /proc/sys/vm/min_unmapped_ratio value
59-
- Choose /proc/sys/vm/min_slab_ratio value
60-
- Choose /proc/sys/vm/numa_stat value
61-
- Choose /proc/sys/vm/oom_kill_allocating_task value
62-
- Choose /proc/sys/vm/oom_dump_tasks value
63-
- Choose /proc/sys/vm/panic_on_oom value
64-
- Choose /proc/sys/vm/dirty_ratio value
65-
- Choose /proc/sys/vm/dirty_background_ratio value
66-
- Choose /proc/sys/vm/dirty_bytes value
67-
- Choose /proc/sys/vm/dirty_background_bytes value
68-
- Choose /proc/sys/vm/dirty_expire_centisecs value
69-
- Choose /proc/sys/vm/dirty_writeback_centisecs value
70-
- Choose /proc/sys/vm/dirtytime_expire_seconds value
71-
- Choose /proc/sys/vm/laptop_mode value
72-
- Choose /proc/sys/vm/nr_hugepages value
73-
- Choose /proc/sys/vm/nr_overcommit_hugepages value
74-
- Choose /proc/sys/vm/hugetlb_optimize_vmemmap value
75-
- Choose /proc/sys/vm/stat_interval value
76-
- Choose /sys/kernel/mm/transparent_hugepage/enabled value
77-
- Choose /sys/kernel/mm/transparent_hugepage/shmem_enabled value
78-
- Choose /sys/kernel/mm/transparent_hugepage/defrag value
79-
- Choose /sys/class/rtc/rtc0/max_user_freq value
80-
- Choose /proc/sys/kernel/numa_balancing value
81-
- Choose /proc/sys/kernel/randomize_va_space value
82-
- Choose /proc/sys/kernel/perf_event_paranoid value
83-
- Choose /proc/sys/kernel/sched_cfs_bandwidth_slice_us value
84-
- Choose /proc/sys/kernel/sched_autogroup_enabled value
85-
- Choose /proc/sys/kernel/sched_rt_runtime_us value
86-
- Choose /proc/sys/kernel/sched_rt_period_us value
87-
- Choose /proc/sys/kernel/sched_schedstats value
88-
- Choose /proc/sys/kernel/timer_migration value
89-
- Choose /proc/sys/kernel/watchdog value
90-
- Choose /proc/sys/kernel/nmi_watchdog value
91-
- Choose /proc/sys/kernel/hung_task_timeout_secs value
92-
- Choose /proc/sys/kernel/pid_max value
93-
- Choose /proc/sys/fs/file-max value
94-
- Choose /proc/sys/net/core/rmem_max value
95-
- Choose /proc/sys/net/core/wmem_max value
96-
- Choose /proc/sys/net/ipv4/tcp_fastopen value
97-
- Choose /proc/sys/net/ipv4/tcp_window_scaling value
98-
- Choose /proc/sys/net/ipv4/tcp_timestamps value
99-
100-
- Launch Options: add custom Launch Options to the `volt` that will be passed to the program executed, example:
41+
### Configure Kernel Parameters related to:
42+
- CPU
43+
- Memory
44+
- Disk
45+
- System
46+
- Network
47+
- Security
48+
### Add custom launch options to the `volt` script:
49+
50+
These will be passed to the executed program. Example:
10151
```
10252
gamemoderun PROTON_USE_WINED3D=1
10353
```
104-
- Extras
105-
- Useful Links for the average Linux Gamer
106-
- Useful Programs for the average Linux Gamer
107-
- Options
108-
- Options for the program itself
109-
- Create or Delete Profiles, all of them with its own settings, witch you can apply trough the program or systray.
54+
### Extras:
55+
- Useful Links and Programs for the average Linux Gamer.
56+
### Options:
57+
- Configure settings specific to the volt-gui program itself.
58+
### Create or Delete Profiles:
59+
- Each profile has its own set of configurations, which can be applied through the program or system tray.
11060

11161
## Build/Test Requirements:
11262

@@ -122,29 +72,34 @@ A graphical user interface for configuring GPU related environment variables and
12272
- ccache (optional, for optimizing compiling times)
12373

12474
## Additional requirements for some Options:
75+
12576
If this software is not provided, its options will be locked.
12677

12778
- [scx](https://github.com/sched-ext/scx) in the case you want to make use of the CPU Pluggable Schedulers
128-
- [mangohud](https://github.com/flightlessmango/MangoHud) in the case you want to make use of the Render Pipeline Settings. Both the native or the Flatpak version satisfy the dependency.
79+
- [mangohud](https://github.com/flightlessmango/MangoHud) in the case you want to make use of the MangoHud Settings. Both the native or the Flatpak version satisfy the dependency.
80+
- [lsfg-vk](https://github.com/PancakeTAS/lsfg-vk) in the case you want to make use of the LS Frame Gen Settings. Both the native or the Flatpak version satisfy the dependency.
12981
- `glxinfo` its required to use the OpenGL Render Selector.
13082
- `vulkaninfo` and the `vulkan mesa layer` are required to use the Vulkan Render Selector.
13183

13284
## Installation:
13385

13486
### Quick Install:
87+
13588
1. Run one of the builds scripts avaliable to create the application:
136-
89+
13790
Using Pyinstaller:
91+
13892
```bash
13993
./make-pyinstaller.sh
14094
```
141-
95+
14296
Using Nuitka:
97+
14398
```bash
14499
./make-nuitka.sh
145100
```
146101

147-
*Note: Both use a Python virtual environment to avoid system wide package installation using pip*
102+
_Note: Both use a Python virtual environment to avoid system wide package installation using pip_
148103

149104
2. Install the application system wide:
150105
```bash
@@ -156,6 +111,7 @@ If this software is not provided, its options will be locked.
156111
- Create a desktop entry at `/usr/share/applications/volt-gui.desktop`
157112

158113
### Removal:
114+
159115
1. To uninstall volt-gui:
160116
```bash
161117
sudo ./remove.sh
@@ -167,20 +123,23 @@ If this software is not provided, its options will be locked.
167123
- Remove the desktop entry `/usr/share/applications/volt-gui.desktop`
168124

169125
## Testing volt-gui:
126+
170127
In the case you want to contribute to the project you can use the provided `test.sh` script to test the changes you made. This script will create a Python virtual environment if one does not already exist. This way, you don't have to install the program dependencies systemwide.
171128

172129
The first time you run it, use the -c flag that will also copy the `volt-helper` to `/usr/local/bin/`, as the program requires it for appliying the settings:
130+
173131
```
174132
./test.sh -c
175133
```
176134

177135
After this unless you make changes to the `volt-helper`, or the script have been updated, just run it without the flag to avoid unnecessary overwrites of the script:
136+
178137
```
179138
./test.sh
180139
```
181140

182-
> [!NOTE]
183-
> You can use the `remove.sh` script to remove the `volt-helper`. The `py_env` folder should be deleted in the case you created it with your system python, and you want to use a python version that its inside a `distrobox` box, or vice versa.
141+
> [!NOTE]
142+
> You can use the `remove.sh` script to remove the `volt-helper`. The `py_env` folder should be deleted in the case you created it with your system python, and you want to use a python version that its inside a `distrobox` box, or vice versa.
184143
185144
## How to use `volt-gui`:
186145

@@ -201,11 +160,13 @@ volt glxgears
201160
When using a Launcher to play your game, you can just add it to the game launch options, like this:
202161

203162
Steam (Native):
163+
204164
```
205165
volt %command%
206166
```
207167

208168
Lutris (Native):
169+
209170
```
210171
volt
211172
```
@@ -220,26 +181,30 @@ volt flatpak run net.pcsx2.PCSX2
220181

221182
## Render Selector explained:
222183

223-
- `Select OpenGL Renderer` Selects the GPU/Renderer that will be used to render OpenGL programs. Those GPUs are obtained trough `glxinfo`.
224-
- `Select Vulkan Renderer` Selects the GPU/Renderer that will be used to render Vulkan programs. Those GPUs are obtained trough `vulkaninfo`, also for this to work on some distros you might need to install some additional dependencies like `vulkan-mesa-layers` on Arch Linux. More info its provided on the Welcome Window that opens once you open volt-gui.
184+
- `Select OpenGL Renderer` Selects the GPU/Renderer that will be used to render OpenGL programs. Those GPUs/Renderers are obtained trough `glxinfo`.
185+
- `Select Vulkan Renderer` Selects the GPU/Renderer that will be used to render Vulkan programs. Those GPUs/Renderers are obtained trough `vulkaninfo`, also for this to work on some distros you might need to install some additional dependencies like `vulkan-mesa-layers` on Arch Linux. More info its provided on the Welcome Window that opens once you open volt-gui.
225186

226187
## Technical References:
227188

228-
Documentation used:
189+
Based on documentation and references from:
229190

230191
- [Arch Linux Wiki - Improving performance](https://wiki.archlinux.org/title/Improving_performance)
231192
- [Arch Linux Wiki - Gaming](https://wiki.archlinux.org/title/Gaming#Improving_performance)
232193
- [sched-ext tutorial - CachyOs Wiki](https://wiki.cachyos.org/configuration/sched-ext/)
233194
- [sched-ext scx Github - Readme](https://github.com/sched-ext/scx/blob/main/README.md)
234195
- [MangoHud Github - Readme](https://github.com/flightlessmango/MangoHud/blob/master/README.md)
196+
- [lsfg-vk Github - Readme](https://github.com/PancakeTAS/lsfg-vk)
197+
- [lsfg-vk Github - Wiki](https://github.com/PancakeTAS/lsfg-vk/wiki)
235198
- [Mesa Documentation - Environment Variables](https://docs.mesa3d.org/envvars.html#environment-variables)
236199
- [FreeDesktop - Dri Configuration Options](https://dri.freedesktop.org/wiki/ConfigurationOptions/)
237-
- [NVIDIA 570 Drivers - Documentation](https://download.nvidia.com/XFree86/Linux-x86_64/570.153.02/README/openglenvvariables.html)
238-
- [NVIDIA 470 Drivers - Documentation](https://download.nvidia.com/XFree86/Linux-x86_64/470.256.02/README/openglenvvariables.html)
239-
- [NVIDIA 390 Drivers - Documentation](https://download.nvidia.com/XFree86/Linux-x86_64/390.157/README/openglenvvariables.html)
200+
- [NVIDIA 580 Drivers - Documentation](https://download.nvidia.com/XFree86/Linux-x86_64/580.82.09/README/)
201+
- [NVIDIA 570 Drivers - Documentation](https://download.nvidia.com/XFree86/Linux-x86_64/570.153.02/README/)
202+
- [NVIDIA 470 Drivers - Documentation](https://download.nvidia.com/XFree86/Linux-x86_64/470.256.02/README/)
203+
- [NVIDIA 390 Drivers - Documentation](https://download.nvidia.com/XFree86/Linux-x86_64/390.157/README/)
240204
- [Linux Kernel - Subsystem Documentation](https://docs.kernel.org/subsystem-apis.html)
241205
- Additionally, sometimes i had to read code from Open Source projects to check how some options work.
242206

243207
## Contributing:
244208

245-
Contributions are welcome. Please ensure any changes maintain compatibility with the supported Python versions and follow the existing code structure. You might want to read: [Build/Test Requirements](#buildtest-requirements), [Installation](#installation) and [Testing volt-gui](#testing-volt-gui).
209+
Contributions are welcome. Please ensure compatibility with supported Python versions and follow the existing code structure.
210+
Read: [Build/Test Requirements](#buildtest-requirements), [Installation](#installation), and [Testing volt-gui](#testing-volt-gui) before contributing.

images/1.png

1.85 MB
Loading

images/2.png

-20.8 KB
Loading

images/3.png

1.17 MB
Loading

install.sh

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,39 @@
11
#!/bin/bash
22

3-
# Exit on errors and unset variables
4-
set -eu
3+
set -euo pipefail
54

6-
# Check if running with sudo
75
if [[ $EUID -ne 0 ]]; then
86
echo -e "\033[31mError: Please run this script as root (use sudo)\033[0m" >&2
97
exit 1
108
fi
119

12-
# Configuration
1310
INSTALL_DIR="/usr/local/bin"
1411
BIN_DIR="bin"
1512
EXECUTABLE="$BIN_DIR/volt-gui"
1613
HELPER_SCRIPT="scripts/volt-helper"
1714
DESKTOP_FILE="/usr/share/applications/volt-gui.desktop"
1815

19-
# Check bin directory
2016
if [[ ! -d "$BIN_DIR" ]]; then
2117
echo -e "\033[31mError: bin directory not found. Run make-pyinstaller.sh or make-nuitka.sh first.\033[0m" >&2
2218
exit 1
2319
fi
2420

25-
# Check main executable
2621
if [[ ! -f "$EXECUTABLE" ]]; then
2722
echo -e "\033[31mError: Executable 'volt-gui' not found in bin directory. Run make-pyinstaller.sh or make-nuitka.sh first.\033[0m" >&2
2823
exit 1
2924
fi
3025

31-
# Check helper script
3226
if [[ ! -f "$HELPER_SCRIPT" ]]; then
3327
echo -e "\033[31mError: Helper script $HELPER_SCRIPT not found.\033[0m" >&2
3428
exit 1
3529
fi
3630

37-
# Install main executable
3831
echo -e "\033[34mInstalling main executable...\033[0m"
3932
install -v -m 755 -T "$EXECUTABLE" "$INSTALL_DIR/volt-gui"
4033

41-
# Install helper script
4234
echo -e "\n\033[34mInstalling helper script...\033[0m"
4335
install -v -m 755 -T "$HELPER_SCRIPT" "$INSTALL_DIR/volt-helper"
4436

45-
# Create desktop entry
4637
echo -e "\n\033[34mCreating desktop entry...\033[0m"
4738
cat > "$DESKTOP_FILE" << EOF
4839
[Desktop Entry]
@@ -57,7 +48,6 @@ EOF
5748

5849
echo "Desktop entry created at $DESKTOP_FILE"
5950

60-
# Update desktop database
6151
echo -e "\n\033[34mUpdating desktop database...\033[0m"
6252
update-desktop-database "$(dirname "$DESKTOP_FILE")"
6353

0 commit comments

Comments
 (0)