Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/pr/143'
Browse files Browse the repository at this point in the history
* origin/pr/143:
  qvm-start-daemon: common_guid_args is now a staticmethod
  tests: kde_args are passed with property of launcher
  Fix missing semi-colon and new line
  Handle KDE with specific arg/desktop file
  • Loading branch information
marmarek committed Jul 15, 2020
2 parents 1a4cdba + f89c4ca commit e0f17f1
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 42 deletions.
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ install:
$(PYTHON) setup.py install -O1 $(PYTHON_PREFIX_ARG) --root $(DESTDIR)
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-kde.desktop $(DESTDIR)/etc/xdg/autostart/
install -d $(DESTDIR)/usr/bin
ln -sf qvm-start-daemon $(DESTDIR)/usr/bin/qvm-start-gui

Expand Down
9 changes: 9 additions & 0 deletions etc/qvm-start-daemon-kde.desktop
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[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;

2 changes: 2 additions & 0 deletions etc/qvm-start-daemon.desktop
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,5 @@ Icon=qubes
Exec=qvm-start-daemon --all --watch
Terminal=false
Type=Application
NotShowIn=KDE;

14 changes: 1 addition & 13 deletions qubesadmin/tests/tools/qvm_start_daemon.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,26 +53,14 @@ def test_000_kde_args(self, proc_mock):
]

args = self.launcher.kde_guid_args(self.app.domains['test-vm'])
self.launcher.kde = True
self.assertEqual(args, ['-T', '-p',
'_KDE_NET_WM_COLOR_SCHEME=s:' +
os.path.expanduser(
'~/.local/share/qubes-kde/red.colors')])

self.assertAllCalled()

@unittest.mock.patch('subprocess.check_output')
def test_001_kde_args_none(self, proc_mock):
self.app.expected_calls[
('dom0', 'admin.vm.List', None, None)] = \
b'0\x00test-vm class=AppVM state=Running\n'

proc_mock.side_effect = [b'']

args = self.launcher.kde_guid_args(self.app.domains['test-vm'])
self.assertEqual(args, [])

self.assertAllCalled()

def test_010_common_args(self):
self.app.expected_calls[
('dom0', 'admin.vm.List', None, None)] = \
Expand Down
60 changes: 31 additions & 29 deletions qubesadmin/tools/qvm_start_daemon.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ def __init__(self, app: qubesadmin.app.QubesBase):
"""
self.app = app
self.started_processes = {}
self.kde = False

@asyncio.coroutine
def send_monitor_layout(self, vm, layout=None, startup=False):
Expand Down Expand Up @@ -215,36 +216,32 @@ def kde_guid_args(vm):
"""Return KDE-specific arguments for gui-daemon, 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', 'KWIN_RUNNING']) == \
b'KWIN_RUNNING = 0x1\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 == b'SI:localuser:root':
pass
elif line.startswith(b'SI:localuser:'):
session_owner = line.split(b':')[2].decode()
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'))]
# 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 == b'SI:localuser:root':
pass
elif line.startswith(b'SI:localuser:'):
session_owner = line.split(b':')[2].decode()
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

def common_guid_args(self, vm):
@staticmethod
def common_guid_args(vm):
"""Common qubes-guid arguments for PV(H), HVM and Stubdomain"""

guid_cmd = [GUI_DAEMON_PATH,
Expand All @@ -262,7 +259,6 @@ def common_guid_args(self, vm):
if vm.features.check_with_template('rpc-clipboard', False):
guid_cmd.extend(['-Q'])

guid_cmd += self.kde_guid_args(vm)
return guid_cmd

@staticmethod
Expand Down Expand Up @@ -295,6 +291,8 @@ def start_gui_for_vm(self, vm, monitor_layout=None):
local X server.
"""
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)])

if vm.virt_mode == 'hvm':
Expand Down Expand Up @@ -495,6 +493,8 @@ def x_reader(conn, callback):
parser.add_argument('--set-keyboard-layout', action='store_true',
help='Set keyboard layout values into GuiVM features.'
'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
parser.add_argument('--force', action='store_true', default=False,
help='Force running daemon without enabled services'
Expand All @@ -521,6 +521,8 @@ def main(args=None):
guivm = args.app.domains.get_blind(args.app.local_name)
set_keyboard_layout(guivm)
launcher = DAEMONLauncher(args.app)
if args.kde:
launcher.kde = True
if args.watch:
if not have_events:
parser.error('--watch option require Python >= 3.5')
Expand Down
1 change: 1 addition & 0 deletions rpm_spec/qubes-core-admin-client.spec.in
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ make -C doc DESTDIR=$RPM_BUILD_ROOT \
%defattr(-,root,root,-)
%doc LICENSE
%config /etc/xdg/autostart/qvm-start-daemon.desktop
%config /etc/xdg/autostart/qvm-start-daemon-kde.desktop
%{_bindir}/qubes-*
%{_bindir}/qvm-*
%{_mandir}/man1/qvm-*.1*
Expand Down

0 comments on commit e0f17f1

Please sign in to comment.