* [RFC cluster/manager 0/2] Configurable window titles for nodes
@ 2026-07-03 11:55 Thomas Ellmenreich
2026-07-03 11:55 ` [PATCH manager 1/2] fix #5475: configurable window title Thomas Ellmenreich
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Thomas Ellmenreich @ 2026-07-03 11:55 UTC (permalink / raw)
To: pve-devel; +Cc: Thomas Ellmenreich
Configurable window titles for nodes
====================================
Currently the window title is fixed to the following string:
$nodename - Proxmox Virtual Environment
This has become problematic for users with multiple clusters, each containing
the same node name. To help distinguish between tabs, it has been requested [1]
that the window title be made configurable with the fqdn as an option.
[1] https://bugzilla.proxmox.com/show_bug.cgi?id=5475
Current implementation
----------------------
After considering the different options, I have deemed a server side
implementation, through the datacenter.cfg, to be the better option.
Specifically because of its durability across sessions and because it
automatically configures the title for all users and all nodes across the
cluster.
The config file stores an enum string that will then be converted to a window
title and inserted in the index.html.tpl file on every request.
The current enum options are:
- default - Displays the default '$nodename - Proxmox Virtual Environment' string
if the config enum is not present
- 'nodeandcluster' - Displays the nodename and then the clustername in the
following style: '$nodename - $clustername'
- 'fqdn' - Displays the current fqdn as returned by `PVE::Tools::get_fqdn()`
Implementation options
----------------------
The main question of this rfc is whether to implement this option as a
client-side or server-side configuration. In my eyes, the pros and cons of each
approach are the following.
Storing config on clientside
----------------------------
Pros:
- Compared to a change in the datacenter.cfg, a session config does not
have a lasting impact on nodes.
- Every user can set the config themselves independent of the choices of
the admin.
Cons:
- Every user is forced to change it themselves, there is no way to change
the window title for all users
- The title has to be changed for every single Node, even for a single
User there is no way to change all nodes to a specific window title
schema.
- Configuration is not durable, meaning that it has to be set again after
each Localstorage clear.
Storing config in datacenter.cfg
--------------------------------
Pros:
- The config is set once per cluster and will then be applied to every
Node automatically.
- Is persistent across sessions, and for all users, meaning it never has
to be set again.
Cons:
- Since it is a change in the Datacenter config the change is more
persistent
- Users can not customize the window title themselves.
- Only an Admin can change the configuration.
Conclusion
----------
I would appreciate feedback on both the approach and the configuration
options. Are there any reasons for one or the other that I may have overlooked?
Are there any other types of window title that we and the community would
appreciate?
Additional note
---------------
If proper cross-node user settings are implemented in the future, this topic
could be revisited, as some of the disadvantages of having a user-defined
configuration would disappear.
pve-manager:
Thomas Ellmenreich (1):
fix #5475: configurable window title
PVE/Service/pveproxy.pm | 21 +++++++++++++++++++++
www/index.html.tpl | 2 +-
www/manager6/Utils.js | 11 +++++++++++
www/manager6/dc/OptionView.js | 6 ++++++
4 files changed, 39 insertions(+), 1 deletion(-)
pve-cluster:
Thomas Ellmenreich (1):
fix #5475: configurable window title
src/PVE/DataCenterConfig.pm | 7 +++++++
1 file changed, 7 insertions(+)
Summary over all repositories:
5 files changed, 46 insertions(+), 1 deletions(-)
--
Generated by murpp 0.12.0
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH manager 1/2] fix #5475: configurable window title
2026-07-03 11:55 [RFC cluster/manager 0/2] Configurable window titles for nodes Thomas Ellmenreich
@ 2026-07-03 11:55 ` Thomas Ellmenreich
2026-07-14 6:47 ` Dominik Csapak
2026-07-03 11:55 ` [PATCH cluster 2/2] " Thomas Ellmenreich
2026-07-14 6:51 ` [RFC cluster/manager 0/2] Configurable window titles for nodes Dominik Csapak
2 siblings, 1 reply; 6+ messages in thread
From: Thomas Ellmenreich @ 2026-07-03 11:55 UTC (permalink / raw)
To: pve-devel; +Cc: Thomas Ellmenreich
Allows for setting of the new 'window_title' datacenter.cfg option
through the ui.
Adjusted the index.html templating to construct the correct window title
on every request according to the cluster configuration.
Signed-off-by: Thomas Ellmenreich <t.ellmenreich@proxmox.com>
---
PVE/Service/pveproxy.pm | 21 +++++++++++++++++++++
www/index.html.tpl | 2 +-
www/manager6/Utils.js | 11 +++++++++++
www/manager6/dc/OptionView.js | 6 ++++++
4 files changed, 39 insertions(+), 1 deletion(-)
diff --git a/PVE/Service/pveproxy.pm b/PVE/Service/pveproxy.pm
index c6011a00..1295f50f 100755
--- a/PVE/Service/pveproxy.pm
+++ b/PVE/Service/pveproxy.pm
@@ -202,6 +202,24 @@ my sub get_path_mtime {
return $mtime;
}
+# builds the window title from the datacenter.cfg configuration
+my $get_window_title = sub {
+ my ($title_enum, $nodename) = @_;
+
+ my $title = "$nodename - Proxmox Virtual Environment";
+
+ if ($title_enum eq "nodeandcluster") {
+ my $clinfo = PVE::Cluster::get_clinfo();
+ my $clustername = $clinfo->{cluster}->{name};
+
+ $title = "$nodename - $clustername";
+ } elsif ($title_enum eq "fqdn") {
+ $title = PVE::Tools::get_fqdn();
+ }
+
+ return $title;
+};
+
# NOTE: Requests to those pages are not authenticated so we must be very careful here
sub get_index {
my ($nodename, $server, $r, $args) = @_;
@@ -232,10 +250,12 @@ sub get_index {
}
}
+ my $window_title;
my $consent_text;
eval {
my $dc_conf = PVE::Cluster::cfs_read_file('datacenter.cfg');
$consent_text = $dc_conf->{'consent-text'};
+ $window_title = $get_window_title->($dc_conf->{'window_title'}, $nodename);
if (!$lang) {
$lang = $dc_conf->{language} // 'en';
@@ -276,6 +296,7 @@ sub get_index {
token => $token,
console => $args->{console},
nodename => $nodename,
+ window_title => $window_title,
debug => $debug,
version => "$version",
wtversion => $wtversion,
diff --git a/www/index.html.tpl b/www/index.html.tpl
index 74ee02d9..5138b7cc 100644
--- a/www/index.html.tpl
+++ b/www/index.html.tpl
@@ -4,7 +4,7 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
- <title>[% nodename %] - Proxmox Virtual Environment</title>
+ <title>[% window_title %]</title>
<link rel="icon" sizes="128x128" href="/pve2/images/logo-128.png" />
<link rel="apple-touch-icon" sizes="128x128" href="/pve2/images/logo-128.png" />
<link rel="stylesheet" type="text/css" href="/pve2/ext6/theme-crisp/resources/theme-crisp-all.css?ver=7.0.0" />
diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js
index 040b5ae0..88ab5b8d 100644
--- a/www/manager6/Utils.js
+++ b/www/manager6/Utils.js
@@ -679,6 +679,17 @@ Ext.define('PVE.Utils', {
return PVE.Utils.console_map[value] || value;
},
+ windowTitleMap: {
+ __default__: '$nodename - Proxmox Virtual Environment',
+ nodeandcluster: '$nodename - $clustername',
+ fqdn: 'Fully Qualified Domain Name',
+ },
+
+ renderWindowTitleViewer: function (value) {
+ value = value || '__default__';
+ return PVE.Utils.windowTitleMap[value] || value;
+ },
+
render_kvm_vga_driver: function (value) {
if (!value) {
return Proxmox.Utils.defaultText;
diff --git a/www/manager6/dc/OptionView.js b/www/manager6/dc/OptionView.js
index dc12aa7e..7091ca0d 100644
--- a/www/manager6/dc/OptionView.js
+++ b/www/manager6/dc/OptionView.js
@@ -91,6 +91,12 @@ Ext.define('PVE.dc.OptionView', {
defaultValue: '__default__',
deleteEmpty: true,
});
+ me.add_combobox_row('window_title', gettext('Window Title'), {
+ renderer: PVE.Utils.renderWindowTitleViewer,
+ comboItems: Object.entries(PVE.Utils.windowTitleMap),
+ defaultValue: '__default__',
+ deleteEmpty: true,
+ });
me.add_text_row('email_from', gettext('Email from address'), {
deleteEmpty: true,
vtype: 'proxmoxMail',
--
2.47.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH cluster 2/2] fix #5475: configurable window title
2026-07-03 11:55 [RFC cluster/manager 0/2] Configurable window titles for nodes Thomas Ellmenreich
2026-07-03 11:55 ` [PATCH manager 1/2] fix #5475: configurable window title Thomas Ellmenreich
@ 2026-07-03 11:55 ` Thomas Ellmenreich
2026-07-14 6:43 ` Dominik Csapak
2026-07-14 6:51 ` [RFC cluster/manager 0/2] Configurable window titles for nodes Dominik Csapak
2 siblings, 1 reply; 6+ messages in thread
From: Thomas Ellmenreich @ 2026-07-03 11:55 UTC (permalink / raw)
To: pve-devel; +Cc: Thomas Ellmenreich
Added new configuration option that will determine the content
of the window title for a pve-manager tab.
Signed-off-by: Thomas Ellmenreich <t.ellmenreich@proxmox.com>
---
src/PVE/DataCenterConfig.pm | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/src/PVE/DataCenterConfig.pm b/src/PVE/DataCenterConfig.pm
index 004122e..480193a 100644
--- a/src/PVE/DataCenterConfig.pm
+++ b/src/PVE/DataCenterConfig.pm
@@ -436,6 +436,13 @@ my $datacenter_schema = {
# FIXME: remove 'applet' with 9.0 (add pve8to9 check!)
enum => ['applet', 'vv', 'html5', 'xtermjs'],
},
+ window_title => {
+ optional => 1,
+ type => 'string',
+ description =>
+ "Define the text shown in the window title for all nodes of this cluster",
+ enum => ['nodeandcluster', 'fqdn'],
+ },
email_from => {
optional => 1,
type => 'string',
--
2.47.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH cluster 2/2] fix #5475: configurable window title
2026-07-03 11:55 ` [PATCH cluster 2/2] " Thomas Ellmenreich
@ 2026-07-14 6:43 ` Dominik Csapak
0 siblings, 0 replies; 6+ messages in thread
From: Dominik Csapak @ 2026-07-14 6:43 UTC (permalink / raw)
To: Thomas Ellmenreich, pve-devel
two comments inline
On 7/3/26 1:56 PM, Thomas Ellmenreich wrote:
> Added new configuration option that will determine the content
> of the window title for a pve-manager tab.
>
> Signed-off-by: Thomas Ellmenreich <t.ellmenreich@proxmox.com>
> ---
> src/PVE/DataCenterConfig.pm | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/src/PVE/DataCenterConfig.pm b/src/PVE/DataCenterConfig.pm
> index 004122e..480193a 100644
> --- a/src/PVE/DataCenterConfig.pm
> +++ b/src/PVE/DataCenterConfig.pm
> @@ -436,6 +436,13 @@ my $datacenter_schema = {
> # FIXME: remove 'applet' with 9.0 (add pve8to9 check!)
> enum => ['applet', 'vv', 'html5', 'xtermjs'],
> },
> + window_title => {
I think we prefer 'kebab-case' nowadays, so this should be:
'window-title'
> + optional => 1,
> + type => 'string',
> + description =>
> + "Define the text shown in the window title for all nodes of this cluster",
> + enum => ['nodeandcluster', 'fqdn'],
also here we should probably use 'node-and-cluster'
> + },
> email_from => {
> optional => 1,
> type => 'string',
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH manager 1/2] fix #5475: configurable window title
2026-07-03 11:55 ` [PATCH manager 1/2] fix #5475: configurable window title Thomas Ellmenreich
@ 2026-07-14 6:47 ` Dominik Csapak
0 siblings, 0 replies; 6+ messages in thread
From: Dominik Csapak @ 2026-07-14 6:47 UTC (permalink / raw)
To: Thomas Ellmenreich, pve-devel
one comment inline
On 7/3/26 1:56 PM, Thomas Ellmenreich wrote:
> Allows for setting of the new 'window_title' datacenter.cfg option
> through the ui.
>
> Adjusted the index.html templating to construct the correct window title
> on every request according to the cluster configuration.
>
> Signed-off-by: Thomas Ellmenreich <t.ellmenreich@proxmox.com>
> ---
> PVE/Service/pveproxy.pm | 21 +++++++++++++++++++++
> www/index.html.tpl | 2 +-
> www/manager6/Utils.js | 11 +++++++++++
> www/manager6/dc/OptionView.js | 6 ++++++
> 4 files changed, 39 insertions(+), 1 deletion(-)
>
> diff --git a/PVE/Service/pveproxy.pm b/PVE/Service/pveproxy.pm
> index c6011a00..1295f50f 100755
> --- a/PVE/Service/pveproxy.pm
> +++ b/PVE/Service/pveproxy.pm
> @@ -202,6 +202,24 @@ my sub get_path_mtime {
> return $mtime;
> }
>
> +# builds the window title from the datacenter.cfg configuration
> +my $get_window_title = sub {
> + my ($title_enum, $nodename) = @_;
> +
> + my $title = "$nodename - Proxmox Virtual Environment";
> +
> + if ($title_enum eq "nodeandcluster") {
> + my $clinfo = PVE::Cluster::get_clinfo();
> + my $clustername = $clinfo->{cluster}->{name};
> +
> + $title = "$nodename - $clustername";
> + } elsif ($title_enum eq "fqdn") {
> + $title = PVE::Tools::get_fqdn();
> + }
> +
aside from the discussion which options are actually included,
I'd add 'proxmox virtual environment' for all titles, not only the
default one.
having more information at the end of the title shouldn't hurt, but can
possibly help users identify the tab quicker
> + return $title;
> +};
> +
> # NOTE: Requests to those pages are not authenticated so we must be very careful here
> sub get_index {
> my ($nodename, $server, $r, $args) = @_;
> @@ -232,10 +250,12 @@ sub get_index {
> }
> }
>
> + my $window_title;
> my $consent_text;
> eval {
> my $dc_conf = PVE::Cluster::cfs_read_file('datacenter.cfg');
> $consent_text = $dc_conf->{'consent-text'};
> + $window_title = $get_window_title->($dc_conf->{'window_title'}, $nodename);
>
> if (!$lang) {
> $lang = $dc_conf->{language} // 'en';
> @@ -276,6 +296,7 @@ sub get_index {
> token => $token,
> console => $args->{console},
> nodename => $nodename,
> + window_title => $window_title,
> debug => $debug,
> version => "$version",
> wtversion => $wtversion,
> diff --git a/www/index.html.tpl b/www/index.html.tpl
> index 74ee02d9..5138b7cc 100644
> --- a/www/index.html.tpl
> +++ b/www/index.html.tpl
> @@ -4,7 +4,7 @@
> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
> <meta http-equiv="X-UA-Compatible" content="IE=edge">
> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
> - <title>[% nodename %] - Proxmox Virtual Environment</title>
> + <title>[% window_title %]</title>
> <link rel="icon" sizes="128x128" href="/pve2/images/logo-128.png" />
> <link rel="apple-touch-icon" sizes="128x128" href="/pve2/images/logo-128.png" />
> <link rel="stylesheet" type="text/css" href="/pve2/ext6/theme-crisp/resources/theme-crisp-all.css?ver=7.0.0" />
> diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js
> index 040b5ae0..88ab5b8d 100644
> --- a/www/manager6/Utils.js
> +++ b/www/manager6/Utils.js
> @@ -679,6 +679,17 @@ Ext.define('PVE.Utils', {
> return PVE.Utils.console_map[value] || value;
> },
>
> + windowTitleMap: {
> + __default__: '$nodename - Proxmox Virtual Environment',
> + nodeandcluster: '$nodename - $clustername',
> + fqdn: 'Fully Qualified Domain Name',
> + },
we'd need to adapt these texts then ofc when my above suggestions
is used.
> +
> + renderWindowTitleViewer: function (value) {
> + value = value || '__default__';
> + return PVE.Utils.windowTitleMap[value] || value;
> + },
> +
> render_kvm_vga_driver: function (value) {
> if (!value) {
> return Proxmox.Utils.defaultText;
> diff --git a/www/manager6/dc/OptionView.js b/www/manager6/dc/OptionView.js
> index dc12aa7e..7091ca0d 100644
> --- a/www/manager6/dc/OptionView.js
> +++ b/www/manager6/dc/OptionView.js
> @@ -91,6 +91,12 @@ Ext.define('PVE.dc.OptionView', {
> defaultValue: '__default__',
> deleteEmpty: true,
> });
> + me.add_combobox_row('window_title', gettext('Window Title'), {
> + renderer: PVE.Utils.renderWindowTitleViewer,
> + comboItems: Object.entries(PVE.Utils.windowTitleMap),
> + defaultValue: '__default__',
> + deleteEmpty: true,
> + });
> me.add_text_row('email_from', gettext('Email from address'), {
> deleteEmpty: true,
> vtype: 'proxmoxMail',
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RFC cluster/manager 0/2] Configurable window titles for nodes
2026-07-03 11:55 [RFC cluster/manager 0/2] Configurable window titles for nodes Thomas Ellmenreich
2026-07-03 11:55 ` [PATCH manager 1/2] fix #5475: configurable window title Thomas Ellmenreich
2026-07-03 11:55 ` [PATCH cluster 2/2] " Thomas Ellmenreich
@ 2026-07-14 6:51 ` Dominik Csapak
2 siblings, 0 replies; 6+ messages in thread
From: Dominik Csapak @ 2026-07-14 6:51 UTC (permalink / raw)
To: Thomas Ellmenreich, pve-devel
On 7/3/26 1:56 PM, Thomas Ellmenreich wrote:
> Configurable window titles for nodes
> ====================================
>
> Currently the window title is fixed to the following string:
>
> $nodename - Proxmox Virtual Environment
>
> This has become problematic for users with multiple clusters, each containing
> the same node name. To help distinguish between tabs, it has been requested [1]
> that the window title be made configurable with the fqdn as an option.
>
> [1] https://bugzilla.proxmox.com/show_bug.cgi?id=5475
>
> Current implementation
> ----------------------
>
> After considering the different options, I have deemed a server side
> implementation, through the datacenter.cfg, to be the better option.
> Specifically because of its durability across sessions and because it
> automatically configures the title for all users and all nodes across the
> cluster.
as we already discussed off-list, having this in the backend is fine for
me (and we can add a pure client override later too)
>
> The config file stores an enum string that will then be converted to a window
> title and inserted in the index.html.tpl file on every request.
>
> The current enum options are:
>
> - default - Displays the default '$nodename - Proxmox Virtual Environment' string
> if the config enum is not present
>
> - 'nodeandcluster' - Displays the nodename and then the clustername in the
> following style: '$nodename - $clustername'
>
> - 'fqdn' - Displays the current fqdn as returned by `PVE::Tools::get_fqdn()`
>
>
I mentioned it in one of the comments on the patch already but i think
we should add 'Proxmox Virtual Environment' (or Proxmox VE) to all titles.
just for completeness sake of what we discussed off-list some time ago,
we could think of having a template string for users to use
(e.g. like the backup comments) but it's probably overkill for the vast
majority of users...
Aside from my comments, patches LGTM
> Implementation options
> ----------------------
>
> The main question of this rfc is whether to implement this option as a
> client-side or server-side configuration. In my eyes, the pros and cons of each
> approach are the following.
>
> Storing config on clientside
> ----------------------------
> Pros:
> - Compared to a change in the datacenter.cfg, a session config does not
> have a lasting impact on nodes.
>
> - Every user can set the config themselves independent of the choices of
> the admin.
> Cons:
> - Every user is forced to change it themselves, there is no way to change
> the window title for all users
>
> - The title has to be changed for every single Node, even for a single
> User there is no way to change all nodes to a specific window title
> schema.
>
> - Configuration is not durable, meaning that it has to be set again after
> each Localstorage clear.
>
> Storing config in datacenter.cfg
> --------------------------------
>
> Pros:
> - The config is set once per cluster and will then be applied to every
> Node automatically.
>
> - Is persistent across sessions, and for all users, meaning it never has
> to be set again.
>
> Cons:
> - Since it is a change in the Datacenter config the change is more
> persistent
>
> - Users can not customize the window title themselves.
>
> - Only an Admin can change the configuration.
>
> Conclusion
> ----------
>
> I would appreciate feedback on both the approach and the configuration
> options. Are there any reasons for one or the other that I may have overlooked?
> Are there any other types of window title that we and the community would
> appreciate?
>
> Additional note
> ---------------
>
> If proper cross-node user settings are implemented in the future, this topic
> could be revisited, as some of the disadvantages of having a user-defined
> configuration would disappear.
>
>
> pve-manager:
>
> Thomas Ellmenreich (1):
> fix #5475: configurable window title
>
> PVE/Service/pveproxy.pm | 21 +++++++++++++++++++++
> www/index.html.tpl | 2 +-
> www/manager6/Utils.js | 11 +++++++++++
> www/manager6/dc/OptionView.js | 6 ++++++
> 4 files changed, 39 insertions(+), 1 deletion(-)
>
>
> pve-cluster:
>
> Thomas Ellmenreich (1):
> fix #5475: configurable window title
>
> src/PVE/DataCenterConfig.pm | 7 +++++++
> 1 file changed, 7 insertions(+)
>
>
> Summary over all repositories:
> 5 files changed, 46 insertions(+), 1 deletions(-)
>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-07-14 6:51 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-03 11:55 [RFC cluster/manager 0/2] Configurable window titles for nodes Thomas Ellmenreich
2026-07-03 11:55 ` [PATCH manager 1/2] fix #5475: configurable window title Thomas Ellmenreich
2026-07-14 6:47 ` Dominik Csapak
2026-07-03 11:55 ` [PATCH cluster 2/2] " Thomas Ellmenreich
2026-07-14 6:43 ` Dominik Csapak
2026-07-14 6:51 ` [RFC cluster/manager 0/2] Configurable window titles for nodes Dominik Csapak
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox