feat : Add new script pve-remove-nag.sh for removing Nag messages in PVE UIs
Some checks failed
ansible-lint / Ansible Lint (push) Failing after 16s
Gitleaks Scan / gitleaks (push) Successful in 4s
Markdown Lint / markdown-lint (push) Successful in 5s

This commit introduces a new script `pve-remove-nag.sh` designed to remove nag messages from both the Proxmox VE web and mobile user interfaces. The script is refactored to improve installation process, and the UI patching logic has been temporarily commented out for further refinement.
This commit is contained in:
2026-02-09 18:12:13 +01:00
parent b42e72a835
commit 75cff9590d
2 changed files with 48 additions and 49 deletions

46
files/pve-remove-nag.sh Normal file
View File

@@ -0,0 +1,46 @@
#!/bin/sh
# source: https://github.com/community-scripts/ProxmoxVE/blob/main/tools/pve/post-pve-install.sh
# Commit c464b95
WEB_JS=/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
if [ -s "$WEB_JS" ] && ! grep -q NoMoreNagging "$WEB_JS"; then
echo "Patching Web UI nag..."
sed -i \
-e "/data\.status/ s/!//" \
-e "/data\.status/ s/active/NoMoreNagging/" \
"$WEB_JS"
fi
MOBILE_TPL=/usr/share/pve-yew-mobile-gui/index.html.tpl
MARKER="<!-- MANAGED BLOCK FOR MOBILE NAG -->"
if [ -f "$MOBILE_TPL" ] && ! grep -q "$MARKER" "$MOBILE_TPL"; then
echo "Patching Mobile UI nag..."
cat <<'EOF' >> "$MOBILE_TPL"
<!-- MANAGED BLOCK FOR MOBILE NAG -->
<script>
function removeSubscriptionElements() {
const dialogs =
document.querySelectorAll('dialog.pwt-outer-dialog');
dialogs.forEach(dialog => {
const text = (dialog.textContent || '').toLowerCase();
if (text.includes('subscription')) dialog.remove();
});
const cards = document.querySelectorAll(
'.pwt-card.pwt-p-2.pwt-d-flex.pwt-interactive.pwt-justify-content-center'
);
cards.forEach(card => {
const text = (card.textContent || '').toLowerCase();
const hasButton = card.querySelector('button');
if (!hasButton && text.includes('subscription')) card.remove();
});
}
const observer = new MutationObserver(removeSubscriptionElements);
observer.observe(document.body, { childList: true, subtree: true });
removeSubscriptionElements();
setInterval(removeSubscriptionElements, 300);
setTimeout(() => observer.disconnect(), 10000);
</script>
EOF
fi

View File

@@ -12,60 +12,13 @@
path: /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
register: proxmoxlib_js
- name: Install pve-remove-nag script
- name: subscription | Install pve-remove-nag script
ansible.builtin.copy:
src: pve-remove-nag.sh
dest: /usr/local/bin/pve-remove-nag.sh
owner: root
group: root
mode: "0755"
content: |
#!/bin/sh
# source: https://github.com/community-scripts/ProxmoxVE/blob/main/tools/pve/post-pve-install.sh
# Commit c464b95
WEB_JS=/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
if [ -s "$WEB_JS" ] && ! grep -q NoMoreNagging "$WEB_JS"; then
echo "Patching Web UI nag..."
sed -i -e "/data\.status/ s/!//" -e "/data\.status/ s/active/NoMoreNagging/" "$WEB_JS"
fi
MOBILE_TPL=/usr/share/pve-yew-mobile-gui/index.html.tpl
MARKER="<!-- MANAGED BLOCK FOR MOBILE NAG -->"
if [ -f "$MOBILE_TPL" ] && ! grep -q "$MARKER" "$MOBILE_TPL"; then
echo "Patching Mobile UI nag..."
printf "%s\n" \
"$MARKER" \
"<script>" \
" function removeSubscriptionElements() {" \
" // --- Remove subscription dialogs ---" \
" const dialogs = document.querySelectorAll('dialog.pwt-outer-dialog');" \
" dialogs.forEach(dialog => {" \
" const text = (dialog.textContent || '').toLowerCase();" \
" if (text.includes('subscription')) {" \
" dialog.remove();" \
" console.log('Removed subscription dialog');" \
" }" \
" });" \
"" \
" // --- Remove subscription cards, but keep Reboot/Shutdown/Console ---" \
" const cards = document.querySelectorAll('.pwt-card.pwt-p-2.pwt-d-flex.pwt-interactive.pwt-justify-content-center');" \
" cards.forEach(card => {" \
" const text = (card.textContent || '').toLowerCase();" \
" const hasButton = card.querySelector('button');" \
" if (!hasButton && text.includes('subscription')) {" \
" card.remove();" \
" console.log('Removed subscription card');" \
" }" \
" });" \
" }" \
"" \
" const observer = new MutationObserver(removeSubscriptionElements);" \
" observer.observe(document.body, { childList: true, subtree: true });" \
" removeSubscriptionElements();" \
" setInterval(removeSubscriptionElements, 300);" \
" setTimeout(() => {observer.disconnect();}, 10000);" \
"</script>" \
"" >> "$MOBILE_TPL"
fi
when: proxmoxlib_js.stat.exists
- name: Install APT post-invoke hook for nag removal