qubes/ext/gui: adjust guid parameters when running on KDE5
Commit from core2:
commit 94d52a13e7
core: adjust guid parameters when running on KDE5
On KDE5 native decoration plugin is used and requires special properties
set (instead of `_QUBES_VMNAME` etc).
Special care needs to be taken when detecting environment, because
environment variables aren't good enough - this script may be running
with cleared environment (through sudo, or from systemd). So check
properties of X11 root window.
QubesOS/qubes-issues#1784
This commit is contained in:
parent
2285789b49
commit
19d9edc291
@ -94,6 +94,40 @@ def get_monitor_layout():
|
|||||||
|
|
||||||
|
|
||||||
class GUI(qubes.ext.Extension):
|
class GUI(qubes.ext.Extension):
|
||||||
|
@staticmethod
|
||||||
|
def kde_guid_args(vm):
|
||||||
|
'''Return KDE-specific arguments for guid, if applicable'''
|
||||||
|
|
||||||
|
guid_cmd = []
|
||||||
|
# Avoid using environment variables for checking the current session,
|
||||||
|
# because this script may be called with cleared env (like with sudo).
|
||||||
|
if subprocess.check_output(
|
||||||
|
['xprop', '-root', '-notype', 'KDE_SESSION_VERSION']) == \
|
||||||
|
'KDE_SESSION_VERSION = 5\n':
|
||||||
|
# native decoration plugins is used, so adjust window properties
|
||||||
|
# accordingly
|
||||||
|
guid_cmd += ['-T'] # prefix window titles with VM name
|
||||||
|
# get owner of X11 session
|
||||||
|
session_owner = None
|
||||||
|
for line in subprocess.check_output(['xhost']).splitlines():
|
||||||
|
if line == 'SI:localuser:root':
|
||||||
|
pass
|
||||||
|
elif line.startswith('SI:localuser:'):
|
||||||
|
session_owner = line.split(":")[2]
|
||||||
|
if session_owner is not None:
|
||||||
|
data_dir = os.path.expanduser(
|
||||||
|
'~{}/.local/share'.format(session_owner))
|
||||||
|
else:
|
||||||
|
# fallback to current user
|
||||||
|
data_dir = os.path.expanduser('~/.local/share')
|
||||||
|
|
||||||
|
guid_cmd += ['-p',
|
||||||
|
'_KDE_NET_WM_COLOR_SCHEME=s:{}'.format(
|
||||||
|
os.path.join(data_dir,
|
||||||
|
'qubes-kde', vm.label.name + '.colors'))]
|
||||||
|
return guid_cmd
|
||||||
|
|
||||||
|
|
||||||
@qubes.ext.handler('domain-start', 'domain-cmd-pre-run')
|
@qubes.ext.handler('domain-start', 'domain-cmd-pre-run')
|
||||||
def start_guid(self, vm, event, preparing_dvm=False, start_guid=True,
|
def start_guid(self, vm, event, preparing_dvm=False, start_guid=True,
|
||||||
extra_guid_args=None, **kwargs):
|
extra_guid_args=None, **kwargs):
|
||||||
@ -146,6 +180,8 @@ class GUI(qubes.ext.Extension):
|
|||||||
open(stubdom_guid_pidfile, 'r').read().strip()
|
open(stubdom_guid_pidfile, 'r').read().strip()
|
||||||
guid_cmd += ['-K', stubdom_guid_pid]
|
guid_cmd += ['-K', stubdom_guid_pid]
|
||||||
|
|
||||||
|
guid_cmd += self.kde_guid_args(vm)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
subprocess.check_call(guid_cmd)
|
subprocess.check_call(guid_cmd)
|
||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
@ -207,6 +243,8 @@ class GUI(qubes.ext.Extension):
|
|||||||
else:
|
else:
|
||||||
guid_cmd += ['-q']
|
guid_cmd += ['-q']
|
||||||
|
|
||||||
|
guid_cmd += self.kde_guid_args(vm)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
subprocess.check_call(guid_cmd)
|
subprocess.check_call(guid_cmd)
|
||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
|
Loading…
Reference in New Issue
Block a user