A growing hub of useful shell scripts for Proxmox VE.
Fast to run. Easy to reuse. Built for real-world homelab and admin workflows.
victor-root.github.io/Proxmox-Tools
Every script with what it does, what it writes on your machine, the line to run it
and a preview of its menu.
In English and French, light and dark. Same files as this repository, nothing else.
Proxmox-Tools is a central place for small, practical, focused scripts made to improve day-to-day life on Proxmox VE.
The goal is simple:
- π§° keep each tool independent
- β‘ make scripts runnable in one command
- π keep behavior clear and predictable
- πΎ always prefer safe changes with backup/restore when possible
- π¦ build a reusable toolbox / hub instead of one giant script
This repository is meant to grow over time with more Proxmox-oriented utilities.
Click a script to unfold what it does, what it supports and the line to run it.
π±οΈ Open Proxmox consoles in new tabs
Script: pve-console-newtab.sh
Adds a more convenient browser workflow for the Proxmox VE web interface:
- π±οΈ Middle click on the main Console button opens the default web console in a new tab
- π±οΈ Middle click on noVNC opens it in a new tab
- π±οΈ Middle click on xterm.js opens it in a new tab
- π±οΈ Middle click on SPICE behaves like a normal click, without opening a useless browser tab
- πΎ automatic backup before patching
- β»οΈ built-in restore options
- π interactive menu
Checked against the official Proxmox VE sources:
| Proxmox VE | Status |
|---|---|
9.x (pve-manager 9.0.0 to 9.2.11) |
β supported |
8.4.2 and newer (with proxmox-widget-toolkit 4.3.12+) |
β supported |
| 8.4.1 and older (8.0, 8.1, 8.2, 8.3) | β not supported |
Proxmox re-formatted its JavaScript sources in June 2025, so the code blocks this patch targets only match releases published after that change.
On an unsupported release the script stops with a clear message, creates no backup and leaves both files untouched, so nothing can break.
Each of the two patched files is also checked and patched on its own: a Proxmox update that refreshes only one of the two packages can simply be re-patched.
bash <(curl -fsSL https://raw.githubusercontent.com/Victor-root/Proxmox-Tools/main/scripts/pve-console-newtab.sh)π Remove the subscription notice
Script: pve-remove-subscription-notice.sh
Removes the "No valid subscription" popup from the Proxmox VE web interface:
- π no more popup at every login
- π§© the buttons that depend on that check keep working (package versions, system report, APT refresh, add repository)
- π± separate option for the mobile interface of Proxmox VE 9, which is another application entirely and needs its own patch
- π optional automatic re-apply after a package update, through an APT hook
- πΎ automatic backup before patching
- β»οΈ built-in restore options
- π interactive menu
βΉοΈ Proxmox VE stays free software either way, but a subscription funds its development and gives access to the enterprise repository.
β³ The final
pveproxyrestart can take up to a minute, and the web interface stays unreachable meanwhile. See About the pveproxy restart.
Checked against the official Proxmox VE sources: the patch applies from proxmox-widget-toolkit 4.0.9 to 5.2.8, which covers Proxmox VE 8.0 through 9.2.
The widely shared one-liner for this comments out the popup itself, which also silently kills every button that waits for it. This script instead lets the requested action run straight away, so nothing else changes. On an unsupported release it stops with a clear message, creates no backup and leaves the file untouched.
Proxmox VE 9 only. The mobile interface of Proxmox VE 9 is a separate application compiled to WebAssembly, so the JavaScript patch above never reaches it and its popup keeps showing on a phone. Proxmox VE 8 ships a different, older mobile interface that this patch does not touch, so on 8 the script refuses the option instead of changing a file for nothing. It nags when the node list comes back without a support level, and that level is filled by one line of Perl in PVE/API2Tools.pm, which is what option 8 patches, with its own backup and its own way back.
That patch is offered separately because it is not the same kind of change: it modifies what the API answers about the support level of the nodes, so a monitoring tool reading that list will see community. The per node subscription endpoint is left alone, the Subscription panel keeps reporting that there is no subscription, and nothing is unlocked: the enterprise repository still needs a real key. The script spells all of this out and asks for confirmation before touching anything.
bash <(curl -fsSL https://raw.githubusercontent.com/Victor-root/Proxmox-Tools/main/scripts/pve-remove-subscription-notice.sh)π Proxmox VE default language manager
Script: pve-default-language-i18n
Changes the default Proxmox VE language for both the shell and the web interface:
- π set the default system locale
- π₯οΈ set the default Proxmox VE web UI language
- π± optional, Proxmox VE 9 only: apply that same default to its mobile interface, which otherwise always starts in English
- π§ auto-detect the server language for the script interface
- π¬π§ fallback to English if the detected language is unsupported
- π optionally configure timezone and NTP
- πΎ automatic backup before changes
- β»οΈ built-in restore options
- π interactive menu
β οΈ Keep an active root SSH session open while running this script, in case the Proxmox VE web interface does not restart correctly.
Checked against the official Proxmox VE sources: the system locale mechanism and the language key of /etc/pve/datacenter.cfg are identical from 8.x to 9.2, so this script behaves the same on both.
Proxmox VE only accepts a fixed list of languages for its web interface. For a language it does not offer (Galician, Hungarian), the system locale is still applied and datacenter.cfg is left untouched, with a clear warning, instead of writing a value Proxmox would silently drop.
Proxmox VE 9 only. The mobile interface of Proxmox VE 9 is a separate application, and it does not read the language of datacenter.cfg. Proxmox VE 8 ships a different, older mobile interface, so on 8 the option reports that this interface is not installed and changes nothing. It keeps its own language in the browser storage, so it starts in English on every new device and in every private window, until someone picks a language in its settings.
Option 7 adds a few lines to its page so a browser that never chose a language starts with the one from datacenter.cfg. A choice made in the mobile settings still wins, and option 8 removes those lines. The page belongs to Proxmox VE, so an update of the mobile interface package drops them and the option simply puts them back.
bash <(curl -fsSL https://raw.githubusercontent.com/Victor-root/Proxmox-Tools/main/scripts/pve-default-language-i18n)π WireGuard VPN server installer & client manager (LXC)
Script: lxc-wireguard-server-install.sh
Installs and manages a native WireGuard VPN server inside a Debian/Ubuntu LXC on Proxmox (no Docker), through an interactive menu:
- π§ guided install with 3 clear network modes: private network, LAN access, full Internet tunnel
- π€ full client lifecycle: add, list (with live connection state), show / re-scan (config + QR code), revoke
- π©Ί diagnostic that checks the service, UDP port, IPv4 routing, firewall rules and connected clients, in plain language
- π endpoint by public IP or domain, with a CGNAT warning and a check that the domain points to the server
- π§± automatic nftables rules and IPv4 forwarding for LAN / full-tunnel modes
- π§ per-client tunables: AllowedIPs, DNS, PersistentKeepalive, MTU (default 1420)
- π§ remembers your settings (endpoint, port, network) after the first run
- π interface in English or French, following the system locale, English by default
- πΎ built-in backup / restore of the whole configuration
- π§Ή clean uninstall
- π interactive menu
bash <(curl -fsSL https://raw.githubusercontent.com/Victor-root/Proxmox-Tools/main/scripts/lxc-wireguard-server-install.sh)
β οΈ Run it as root inside the target LXC (not on the Proxmox host). On an unprivileged container, WireGuard needs/dev/net/tunpassed through: the script detects this and shows the exactpct setcommands to run on the host if needed.
π₯οΈ Fastfetch summary on every root shell
Script: pve-fastfetch-motd.sh
Installs Fastfetch and turns it into a clean Proxmox summary displayed every time a root shell opens:
- π¦ installs the latest stable Fastfetch release from GitHub, with automatic architecture detection (amd64, arm64, armhf, ppc64el, riscv64, s390x)
- π¨ writes a ready-to-use Proxmox themed configuration, split in three blocks: hypervisor info, physical resources, network and access
- π live values: PVE version, CPU temperature and usage, RAM, swap, storage, ZFS pool health, bridge state, local and public IP, DNS, Fail2ban jails
- π optional HTTPS certificate check on a FQDN you provide, which reads only the public certificate presented by your reverse proxy, never a private key
- βοΈ or paste your own
config.jsoncstraight into the menu: Fastfetch checks it, and it replaces the generated one only if it is valid - π displayed only in interactive root shells, never during scripts, file transfers or automation
- π§Ή disables the old Debian MOTD, with the original state saved for a later restore
- β»οΈ two removal levels: stop the display at every shell session and keep Fastfetch, or remove everything and uninstall the package
- πΎ automatic backup of an existing Fastfetch configuration before writing
- π interface and generated labels in English or French, following the server locale
- π interactive menu
The script only relies on pveversion, apt and the official Fastfetch packages, so it behaves the same on Proxmox VE 8.x and 9.x.
It stops with a clear message when it is not run as root on a Proxmox VE host, and running it again is safe: an up-to-date Fastfetch is not downloaded twice, and the login hook and MOTD changes are simply re-applied.
The bridge shown in the network block is detected from the default route, with vmbr0 as fallback, and no domain, IP or hostname is ever hard coded in the script.
bash <(curl -fsSL https://raw.githubusercontent.com/Victor-root/Proxmox-Tools/main/scripts/pve-fastfetch-motd.sh)βΉοΈ Open a new root shell after the installation to see the result.
Each script lives as its own file inside the scripts/ directory.
That means:
- you can call one specific script directly
- you do not need a global installer for everything
- each tool can evolve independently
- sharing a tool is easy with a targeted raw GitHub URL
Example layout:
scripts/
βββ pve-console-newtab.sh
βββ pve-default-language-i18n
βββ future-tool-1.sh
βββ future-tool-2.sh
βββ ...
Some tools in this repository may modify Proxmox files or behavior.
Before using any script:
- read what it does
- keep an active root SSH session open
- make sure you understand the rollback path
- prefer testing on a non-critical node first
When relevant, scripts in this repository should:
- create backups before changes
- fail safely if expected patterns are not found
- avoid destructive behavior by default
Every script that changes the web interface restarts pveproxy at the end. That restart can take up to a minute: on start Proxmox refreshes the cluster certificates (pvecm updatecerts), and on a first run it may also refresh the appliance template list.
The web interface stays unreachable during that time, and the script looks frozen while it waits. This is expected. Let it finish rather than interrupting it, and reload the page with Ctrl+Shift+R once it is done.
This repo is intended to become a practical Proxmox utility hub, for example:
- UI enhancements
- backup helpers
- audit / health-check scripts
- storage / ZFS helpers
- cluster helpers
- networking helpers
- quick-fix admin tools
The main idea is not to build a huge framework.
The idea is to keep things:
- simple
- useful
- modular
- easy to launch
Ideas, fixes, and improvements are welcome.
Good contributions are usually:
- focused on one real problem
- easy to understand
- safe to test
- easy to remove or rollback
This repository is published under the GNU Affero General Public License v3.0. The full text is in LICENSE.
You can use, study, change and share these scripts, as long as what you share stays under the same license and keeps the credit.
These scripts are provided as-is.
Use them carefully, review them before running them, and test them in your own environment.
Because Proxmox is great, but there are always a few small things that can be made faster, cleaner, or less annoying with the right script.
This repository exists to collect those improvements in one place.