Handle KDE with specific arg/desktop file

This commit is contained in:
Frédéric Pierret (fepitre) 2020-06-24 10:51:39 +02:00
parent ae39c75867
commit 92e87b122e
No known key found for this signature in database
GPG Key ID: 484010B5CDC576E2
5 changed files with 39 additions and 27 deletions

View File

@ -12,6 +12,7 @@ install:
$(PYTHON) setup.py install -O1 $(PYTHON_PREFIX_ARG) --root $(DESTDIR) $(PYTHON) setup.py install -O1 $(PYTHON_PREFIX_ARG) --root $(DESTDIR)
install -d $(DESTDIR)/etc/xdg/autostart install -d $(DESTDIR)/etc/xdg/autostart
install -m 0644 etc/qvm-start-daemon.desktop $(DESTDIR)/etc/xdg/autostart/ install -m 0644 etc/qvm-start-daemon.desktop $(DESTDIR)/etc/xdg/autostart/
install -m 0644 etc/qvm-start-daemon-kde.desktop $(DESTDIR)/etc/xdg/autostart/
install -d $(DESTDIR)/usr/bin install -d $(DESTDIR)/usr/bin
ln -sf qvm-start-daemon $(DESTDIR)/usr/bin/qvm-start-gui ln -sf qvm-start-daemon $(DESTDIR)/usr/bin/qvm-start-gui

View File

@ -0,0 +1,8 @@
[Desktop Entry]
Name=Qubes Guid/Pacat
Comment=Starts GUI/AUDIO daemon for Qubes VMs in KDE
Icon=qubes
Exec=qvm-start-daemon --all --watch --kde
Terminal=false
Type=Application
OnlyShowIn=KDE

View File

@ -5,3 +5,4 @@ Icon=qubes
Exec=qvm-start-daemon --all --watch Exec=qvm-start-daemon --all --watch
Terminal=false Terminal=false
Type=Application Type=Application
NotShowIn=KDE

View File

@ -149,6 +149,7 @@ class DAEMONLauncher:
""" """
self.app = app self.app = app
self.started_processes = {} self.started_processes = {}
self.kde = False
@asyncio.coroutine @asyncio.coroutine
def send_monitor_layout(self, vm, layout=None, startup=False): def send_monitor_layout(self, vm, layout=None, startup=False):
@ -215,33 +216,28 @@ class DAEMONLauncher:
"""Return KDE-specific arguments for gui-daemon, if applicable""" """Return KDE-specific arguments for gui-daemon, if applicable"""
guid_cmd = [] guid_cmd = []
# Avoid using environment variables for checking the current session, # native decoration plugins is used, so adjust window properties
# because this script may be called with cleared env (like with sudo). # accordingly
if subprocess.check_output( guid_cmd += ['-T'] # prefix window titles with VM name
['xprop', '-root', '-notype', 'KWIN_RUNNING']) == \ # get owner of X11 session
b'KWIN_RUNNING = 0x1\n': session_owner = None
# native decoration plugins is used, so adjust window properties for line in subprocess.check_output(['xhost']).splitlines():
# accordingly if line == b'SI:localuser:root':
guid_cmd += ['-T'] # prefix window titles with VM name pass
# get owner of X11 session elif line.startswith(b'SI:localuser:'):
session_owner = None session_owner = line.split(b':')[2].decode()
for line in subprocess.check_output(['xhost']).splitlines(): if session_owner is not None:
if line == b'SI:localuser:root': data_dir = os.path.expanduser(
pass '~{}/.local/share'.format(session_owner))
elif line.startswith(b'SI:localuser:'): else:
session_owner = line.split(b':')[2].decode() # fallback to current user
if session_owner is not None: data_dir = os.path.expanduser('~/.local/share')
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', guid_cmd += ['-p',
'_KDE_NET_WM_COLOR_SCHEME=s:{}'.format( '_KDE_NET_WM_COLOR_SCHEME=s:{}'.format(
os.path.join(data_dir, os.path.join(data_dir,
'qubes-kde', 'qubes-kde',
vm.label.name + '.colors'))] vm.label.name + '.colors'))]
return guid_cmd return guid_cmd
def common_guid_args(self, vm): def common_guid_args(self, vm):
@ -262,7 +258,6 @@ class DAEMONLauncher:
if vm.features.check_with_template('rpc-clipboard', False): if vm.features.check_with_template('rpc-clipboard', False):
guid_cmd.extend(['-Q']) guid_cmd.extend(['-Q'])
guid_cmd += self.kde_guid_args(vm)
return guid_cmd return guid_cmd
@staticmethod @staticmethod
@ -295,6 +290,8 @@ class DAEMONLauncher:
local X server. local X server.
""" """
guid_cmd = self.common_guid_args(vm) guid_cmd = self.common_guid_args(vm)
if self.kde:
guid_cmd.extend(self.kde_guid_args(vm))
guid_cmd.extend(['-d', str(vm.xid)]) guid_cmd.extend(['-d', str(vm.xid)])
if vm.virt_mode == 'hvm': if vm.virt_mode == 'hvm':
@ -495,6 +492,8 @@ parser.add_argument('--notify-monitor-layout', action='store_true',
parser.add_argument('--set-keyboard-layout', action='store_true', parser.add_argument('--set-keyboard-layout', action='store_true',
help='Set keyboard layout values into GuiVM features.' help='Set keyboard layout values into GuiVM features.'
'This option is implied by --watch') 'This option is implied by --watch')
parser.add_argument('--kde', action='store_true',
help='Set KDE specific arguments to gui-daemon.')
# Add it for the help only # Add it for the help only
parser.add_argument('--force', action='store_true', default=False, parser.add_argument('--force', action='store_true', default=False,
help='Force running daemon without enabled services' help='Force running daemon without enabled services'
@ -521,6 +520,8 @@ def main(args=None):
guivm = args.app.domains.get_blind(args.app.local_name) guivm = args.app.domains.get_blind(args.app.local_name)
set_keyboard_layout(guivm) set_keyboard_layout(guivm)
launcher = DAEMONLauncher(args.app) launcher = DAEMONLauncher(args.app)
if args.kde:
launcher.kde = True
if args.watch: if args.watch:
if not have_events: if not have_events:
parser.error('--watch option require Python >= 3.5') parser.error('--watch option require Python >= 3.5')

View File

@ -53,6 +53,7 @@ make -C doc DESTDIR=$RPM_BUILD_ROOT \
%defattr(-,root,root,-) %defattr(-,root,root,-)
%doc LICENSE %doc LICENSE
%config /etc/xdg/autostart/qvm-start-daemon.desktop %config /etc/xdg/autostart/qvm-start-daemon.desktop
%config /etc/xdg/autostart/qvm-start-daemon-kde.desktop
%{_bindir}/qubes-* %{_bindir}/qubes-*
%{_bindir}/qvm-* %{_bindir}/qvm-*
%{_mandir}/man1/qvm-*.1* %{_mandir}/man1/qvm-*.1*