tools: terminate qvm-start-gui when X server is terminated
qvm-start-gui lifecycle should be bound to X server lifecycle. It should be restarted when user logoff and login again, at least to start gui-daemons again. Do that by opening a connection to X server and reacting to breaking that socket. Fixes QubesOS/qubes-issues#3147
This commit is contained in:
parent
aea2dc0790
commit
9bf404f7bf
@ -8,3 +8,4 @@ python-daemon
|
|||||||
mock
|
mock
|
||||||
lxml
|
lxml
|
||||||
PyYAML
|
PyYAML
|
||||||
|
xcffib
|
||||||
|
@ -23,10 +23,10 @@
|
|||||||
import os
|
import os
|
||||||
import signal
|
import signal
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
import xcffib
|
||||||
|
import xcffib.xproto # pylint: disable=unused-import
|
||||||
|
|
||||||
import daemon.pidfile
|
import daemon.pidfile
|
||||||
import qubesadmin
|
import qubesadmin
|
||||||
@ -346,6 +346,14 @@ class GUILauncher(object):
|
|||||||
events.add_handler('connection-established',
|
events.add_handler('connection-established',
|
||||||
self.on_connection_established)
|
self.on_connection_established)
|
||||||
|
|
||||||
|
def x_reader(conn, callback):
|
||||||
|
'''Try reading something from X connection to check if it's still alive.
|
||||||
|
In case it isn't, call *callback*.
|
||||||
|
'''
|
||||||
|
try:
|
||||||
|
conn.poll_for_event()
|
||||||
|
except xcffib.ConnectionException:
|
||||||
|
callback()
|
||||||
|
|
||||||
if 'XDG_RUNTIME_DIR' in os.environ:
|
if 'XDG_RUNTIME_DIR' in os.environ:
|
||||||
pidfile_path = os.path.join(os.environ['XDG_RUNTIME_DIR'],
|
pidfile_path = os.path.join(os.environ['XDG_RUNTIME_DIR'],
|
||||||
@ -394,10 +402,15 @@ def main(args=None):
|
|||||||
loop.add_signal_handler(signal.SIGHUP,
|
loop.add_signal_handler(signal.SIGHUP,
|
||||||
launcher.send_monitor_layout_all)
|
launcher.send_monitor_layout_all)
|
||||||
|
|
||||||
|
conn = xcffib.connect()
|
||||||
|
x_fd = conn.get_file_descriptor()
|
||||||
|
loop.add_reader(x_fd, x_reader, conn, events_listener.cancel)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
loop.run_until_complete(events_listener)
|
loop.run_until_complete(events_listener)
|
||||||
except asyncio.CancelledError:
|
except asyncio.CancelledError:
|
||||||
pass
|
pass
|
||||||
|
loop.remove_reader(x_fd)
|
||||||
loop.stop()
|
loop.stop()
|
||||||
loop.run_forever()
|
loop.run_forever()
|
||||||
loop.close()
|
loop.close()
|
||||||
|
@ -46,6 +46,7 @@ Summary: Python34 module qubesadmin
|
|||||||
Requires: python-daemon
|
Requires: python-daemon
|
||||||
Requires: python34-docutils
|
Requires: python34-docutils
|
||||||
Requires: python34-lxml
|
Requires: python34-lxml
|
||||||
|
Requires: python34-xcffib
|
||||||
Conflicts: qubes-manager < 4.0.6
|
Conflicts: qubes-manager < 4.0.6
|
||||||
|
|
||||||
%description -n python34-qubesadmin
|
%description -n python34-qubesadmin
|
||||||
@ -56,6 +57,7 @@ Summary: Python3 module qubesadmin
|
|||||||
Requires: python3-daemon
|
Requires: python3-daemon
|
||||||
Requires: python3-docutils
|
Requires: python3-docutils
|
||||||
Requires: python3-lxml
|
Requires: python3-lxml
|
||||||
|
Requires: python3-xcffib
|
||||||
Conflicts: qubes-manager < 4.0.6
|
Conflicts: qubes-manager < 4.0.6
|
||||||
|
|
||||||
%description -n python3-qubesadmin
|
%description -n python3-qubesadmin
|
||||||
|
Loading…
Reference in New Issue
Block a user