sed -i_orig "s/data.status === 'Active'/true/g" /usr/share/pve-manager/js/pvemanagerlib.js
sed -i_orig "s/if (res === null || res === undefined || \!res || res/if(/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
sed -i_orig "s/.data.status.toLowerCase() !== 'active'/false/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
systemctl restart pveproxy
清除浏览器缓存,刷新页面
方法一:修改订阅状态检测逻辑
这是笔者自行探索总结出来的方法。
原理:通过修改订阅状态检测的条件判断,将严格不等于
!==改为严格等于===,本质上仅替换一个字符。当系统检测订阅状态时,原本需要状态为"active"才不显示警告,修改后只要状态不是"active"就不会触发警告弹窗,从而实现屏蔽了未订阅提示。优缺点:完美适配PVE 9.x版本,不会导致PVE的WEB后台「软件包版本」按钮无法响应。
适用PVE版本范围:经测试PVE 8.x和PVE 9.x版本有效,理论上兼容PVE 7.x及以前版本。
cp /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js.bak
line_num=$(grep -n "res.data.status.toLowerCase() !== 'active'" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js | head -1 | cut -d: -f1)
sed -i "${line_num}s/!==/===/" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
systemctl restart pveproxy
方法二:禁用弹窗显示函数
该方法是从Github上PVE-Tools-9项目中找到的。
原理:通过将Ext.Msg.show函数调用替换为void表达式,使弹窗显示函数失效。void操作符会计算表达式但返回undefined,从而阻止了弹窗的实际显示。
优缺点:不能完美适配PVE 9.x版本,导致PVE的WEB后台「软件包版本」按钮无法响应。
适用PVE版本范围:理论上兼容所有版本。
cp /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js.bak
sed -Ezi "s/(Ext.Msg.show\(\{\s+title: gettext\('No valid sub)/void\(\{ \/\/\1/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
systemctl restart pveproxy
方法三:重写条件判断表达式
这是网络上流传最广的方法,绝大部分教程都是基于此方法。
原理:彻底重写订阅检测的条件判断逻辑,将复杂的条件检查替换为简单的false值。通过两个sed命令分别处理条件语句的起始部分和状态检测部分,使整个条件判断永远返回false,从而跳过弹窗显示代码。
优缺点:同方法二,不能完美适配PVE 9.x版本,会导致「软件包版本」按钮无法响应。
适用PVE版本范围:理论上兼容所有版本。
cp /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js.bak
sed -i "s/if (res === null || res === undefined || \!res || res/if(/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
sed -i "s/.data.status.toLowerCase() !== 'active'/false/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
systemctl restart pveproxy
后记
上述三种方法同样适用于屏蔽PBS备份系统的无有效订阅提示弹窗,即Proxmox Backup Server,修改文件操作完成之后重启PBS代理服务即可。
此外,对于PBS系统来说,这三种方法均能正确实现屏蔽作用,无其他影响。
systemctl restart proxmox-backup-proxy
参考文献
[1] PVE-Tools[EB/OL]. https://github.com/Mapleawaa/PVE-Tools-9/blob/main/PVE-Tools.sh.