Linux - CentOS 8的gnome-terminal无法弹到CentOS 7.9桌面
问题
CentOS 8的gnome-terminal无法弹到CentOS 7.9桌面,报错
Error constructing proxy for org.gnome.Terminal:/org/gnome/Terminal/Factory0: Error calling StartServiceByName for org.gnome.Terminal: Timeout was reached
问题分析
CentOS 7.9的gnome-terminal使用的是per session的dbus环境,而CentOS 8的桌面环境使用的是per user的。因此从CentOS 8的gnome-terminal弹到CentOS 7.9的X Server上,无法弹出来,会超时报错退出。
定制gnome-terminal启动环境
定制modulefile,名称为gnome_terminal_setting_modulefile
[thesre@centos8 ~]$ cat ~/privatemodules/opensource/gnome_terminal_setting/1.0
#%Module1.0
#Author: thensre
# Alias only be set when loaded.
switch -- [module-info mode] {
add -
load -
switch2 {
set-alias gnome-terminal "source ~/privatemodules_procedures/gnome_terminal_settings.csh \\\\!\\*; \\\\gnome-terminal \\\\!\\*"
}
}
[thesre@centos8 ~]$
[thesre@centos8 ~]$ cat ~/privatemodules_procedures/gnome_terminal_setting.csh
if ($?DBUS_SESSION_BUS_ADDRESS) then
if ($DBUS_SESSION_BUS_ADDRESS =~ unix:path=/run/user/*) then
goto dbus_setting_for_gnome_terminal
endif
else
goto dbus_setting_for_gnome_terminal
endif
dbus_setting_for_gnome_terminal:
if ($#argv > 0) then
set __display=`echo \!* | sed -r 's#.*--display=([^ ]*).*#\1#g'`
endif
if ((!$?__display || $__display == "") && $?DISPLAY) then
set __display="$DISPLAY"
endif
if ($?__display && $__display != "") then
set display_string=`echo $__display | sed -r -e 's#:#_#g' -e 's#\.[0-9]$##g'`
set machine_id="`cat /var/lib/dbus/machine-id`"
set dbus_file="~/.dbus/session-bus/${machine_id}-${display_string}"
if (-f ${dbus_file}) then
eval `cat ${dbus_file} | grep -v '^#' \
| sed -r -e 's#DBUS_SESSION_BUS_ADDRESS=#setenv DBUS_SESSION_BUS_ADDRESS #g; \
-e 's#DBUS_SESSION_BUS_PID=#setenv DBUS_SESSION_BUS_PID #g; \
-e 's#DBUS_SESSION_BUS_WINDOW=#setenv DBUS_SESSION_BUS_WINDOW #g; \
'`
endif
ps -p $DBUS_SESSION_BUS_PID >& /dev/null
if ($? != 0) then
rm -rf ${dbus_file}
eval `timeout 5s /usr/bin/dbus-launch --csh-syntax`
endif
else
eval `timeout 5s /usr/bin/dbus-launch --csh-syntax`
endif
unset __display display_string machine_id dbus_file
参考资料
https://thesre.wordpress.com/2020/04/05/error-constructing-proxy-for-org-gnome-terminal-org-gnome-terminal-factory0-error-calling-startservicebyname-for-org-gnome-terminal-timeout-was-reached/
https://bugzilla.redhat.com/show_bug.cgi?id=1353953
https://dbus.freedesktop.org/doc/dbus-specification.html