This is required so the daemon can manage the various sessions. The helper is launched every time a graphic session is started. It sends information to the daemon on how to connect to the given display server. Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> --- data/spice-streaming.desktop.in | 3 +-- spice-streaming-agent.spec.in | 1 + src/Makefile.am | 6 +++++ src/spice-streaming-helper | 40 +++++++++++++++++++++++++++++++++ 4 files changed, 48 insertions(+), 2 deletions(-) create mode 100755 src/spice-streaming-helper diff --git a/data/spice-streaming.desktop.in b/data/spice-streaming.desktop.in index dcb30a3..5e4e863 100644 --- a/data/spice-streaming.desktop.in +++ b/data/spice-streaming.desktop.in @@ -1,8 +1,7 @@ [Desktop Entry] Name=SPICE Streaming Agent Comment=Agent for Streaming the framebuffer to Spice -Exec=@BINDIR@/spice-streaming-agent -#TryExec=/usr/bin/spice-streaming-agent +Exec=@BINDIR@/spice-streaming-helper Terminal=false Type=Application Categories= diff --git a/spice-streaming-agent.spec.in b/spice-streaming-agent.spec.in index fd10270..5f4eec9 100644 --- a/spice-streaming-agent.spec.in +++ b/spice-streaming-agent.spec.in @@ -60,6 +60,7 @@ fi %doc COPYING ChangeLog README %{_udevrulesdir}/90-spice-guest-streaming.rules %{_bindir}/spice-streaming-agent +%{_bindir}/spice-streaming-helper %{_sysconfdir}/xdg/autostart/spice-streaming.desktop %{_datadir}/gdm/greeter/autostart/spice-streaming.desktop /usr/lib/systemd/system/spice-streaming-agent.socket diff --git a/src/Makefile.am b/src/Makefile.am index 9b4bb30..5f11967 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -9,6 +9,8 @@ if ENABLE_TESTS SUBDIRS = . unittests endif +EXTRA_DIST = + AM_CPPFLAGS = \ -DSPICE_STREAMING_AGENT_PROGRAM \ -I$(top_srcdir)/include \ @@ -67,3 +69,7 @@ spice_streaming_agent_SOURCES = \ daemon.cpp \ daemon.hpp \ $(NULL) + +helperdir = $(bindir) +helper_SCRIPTS = spice-streaming-helper +EXTRA_DIST += spice-streaming-helper diff --git a/src/spice-streaming-helper b/src/spice-streaming-helper new file mode 100755 index 0000000..11a9128 --- /dev/null +++ b/src/spice-streaming-helper @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 + +"""This helper send session information to the daemon so the daemon can +know how to connect to a given display server. +Currently only X server display is used.""" + +import os +import socket +import sys +import struct + +# daemon address +SERVER_ADDRESS = "\0spice-streaming-agent-daemon" + +def encode_auth(): + """Encode authentication data to send to daemon""" + def encode_env(var, env_code): + """Encode a give environment""" + val = os.environ.get(var, '').encode('utf-8') + return struct.pack('BB', env_code, len(val)) + val + display = encode_env('DISPLAY', 1) + xauthority = encode_env('XAUTHORITY', 2) + return struct.pack('B', 1) + display + xauthority + +def main(): + """Communicate authentication data to the daemon""" + try: + sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + sock.connect(SERVER_ADDRESS) + sock.send(encode_auth()) + # wait reply or disconnection from the daemon + # the daemon can do some check on this process so keep it up + # till we receive a disconnection + sock.recv(10) + except socket.error as msg: + print(msg, file=sys.stderr) + sys.exit(1) + +if __name__ == "__main__": + main() -- 2.17.0 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel