This article is also available in french
If you run Proxmox Virtual Environment for VMs in a lab, homelab, or even inside a small startup or SMB dev team, you’ve probably hit this daily annoyance: the “You do not have a valid subscription” popup that appears every single time you log into the web UI, plus the enterprise repositories that stop updates dead in their tracks unless you have a paid license.
Here’s how to clean it up properly on Proxmox 9 (based on Debian 13 “Trixie”). We’ll switch to the free public no-subscription repositories so updates work normally, and we’ll permanently silence that famous nag screen.
⚠️ Quick ethical note: These tweaks are perfect for personal use, labs, or evaluation. If you’re running Proxmox in a real production environment, subscribing is the best way to support the project and get official help.
Switching to No-Subscription Repositories
By default Proxmox points to paid enterprise repos. We’ll replace them with the public ones.
If you use Ceph (Squid version)
sed -i \
-e 's|https://enterprise.proxmox.com/debian/ceph-squid|http://download.proxmox.com/debian/ceph-squid|g' \
-e 's/Components: enterprise/Components: no-subscription/g' \
/etc/apt/sources.list.d/ceph.sources
Remove the old enterprise repo
rm /etc/apt/sources.list.d/pve-enterprise.sources
Add the no-subscription repo
cat > /etc/apt/sources.list.d/proxmox.sources << 'EOF'
Types: deb
URIs: http://download.proxmox.com/debian/pve
Suites: trixie
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
Refresh the package list:
apt update
From now on, apt upgrade works without any issues.
Silencing the Subscription Nag Screen for Good
On Proxmox 9 the reliable way is to flip a small condition in the JavaScript that controls the message.
Quick manual patch (great for testing)
# Always make a backup
cp /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js.bak
# The magic one-liner
sed -i "s/data.status.toLowerCase() !== 'active'/data.status.toLowerCase() === 'active'/" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
systemctl restart pveproxy
It works immediately… but the package will overwrite the file on the next update. So let’s make it permanent.
Permanent solution with an APT hook
We create a tiny script that re-applies the patch automatically after every package upgrade.
mkdir -p /etc/apt/scripts
nano /etc/apt/scripts/no-nag-fix.sh
Paste this script:
#!/bin/bash
TARGET="/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js"
VERFILE="/var/lib/no-nag.version"
LOGFILE="/var/log/no-nag.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$DATE] Checking..." >> "$LOGFILE"
if [ ! -f "$TARGET" ]; then
exit 0
fi
VERSION=$(dpkg-query -W -f='${Version}' proxmox-widget-toolkit 2>/dev/null)
if [ -z "$VERSION" ]; then
exit 0
fi
if [ -f "$VERFILE" ] && [ "$(cat "$VERFILE")" = "$VERSION" ]; then
echo "[$DATE] Version $VERSION already patched." >> "$LOGFILE"
exit 0
fi
if sed -i "s/data.status.toLowerCase() !== 'active'/data.status.toLowerCase() === 'active'/" "$TARGET"; then
echo "[$DATE] Patch applied for $VERSION." >> "$LOGFILE"
echo "$VERSION" > "$VERFILE"
systemctl restart pveproxy > /dev/null 2>&1
else
echo "[$DATE] ERROR applying patch." >> "$LOGFILE"
fi
Make it executable:
chmod 750 /etc/apt/scripts/no-nag-fix.sh
Now create the hook:
nano /etc/apt/apt.conf.d/99-no-nag-script
Add this single line:
DPkg::Post-Invoke { "/etc/apt/scripts/no-nag-fix.sh || true"; };
Run the script once manually:
/etc/apt/scripts/no-nag-fix.sh
Clear your browser cache (or open a private window) and reload the Proxmox UI. The subscription message is gone.
Troubleshooting
- Message still there? →
systemctl restart pveproxy, clear browser cache, check with F12. - “Package versions” button broken? → Reinstall and re-patch:
apt install --reinstall proxmox-widget-toolkit sed -i "s/data.status.toLowerCase() !== 'active'/data.status.toLowerCase() === 'active'/" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js systemctl restart pveproxy - Apt errors? → Double-check files in
/etc/apt/sources.list.d/and make sure the Proxmox GPG key is present.
The Opsvox Minute
With 20+ years of open-source expertise, we see a lot of Proxmox clusters running in dev teams that just want solid virtualization without turning into full-time sysadmins. We often automate these exact tweaks (plus monitoring, HA, backups, security hardening…) with Ansible so everything stays clean and your developers stay focused on shipping code.

Conclusion
You now have a clean, quiet, up-to-date Proxmox 9 setup — perfect for experimentation or daily use.
If infrastructure ever starts eating too much of your time, drop us a line. We love taking care of the ops side so you can stay 100 % on what really matters.
Happy virtualizing! 🖥️