~lightdm-team/lightdm/1.4

« back to all changes in this revision

Viewing changes to src/seat-xremote.c

  • Committer: Robert Ancell
  • Date: 2014-03-13 02:15:38 UTC
  • Revision ID: robert.ancell@canonical.com-20140313021538-u2mxfxrrfw5u58ic
Tags: 1.4.7
Releasing 1.4.7

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2010-2011 Robert Ancell.
 
3
 * Author: Robert Ancell <robert.ancell@canonical.com>
 
4
 * 
 
5
 * This program is free software: you can redistribute it and/or modify it under
 
6
 * the terms of the GNU General Public License as published by the Free Software
 
7
 * Foundation, either version 3 of the License, or (at your option) any later
 
8
 * version. See http://www.gnu.org/copyleft/gpl.html the full text of the
 
9
 * license.
 
10
 */
 
11
 
 
12
#include <string.h>
 
13
 
 
14
#include "seat-xremote.h"
 
15
#include "configuration.h"
 
16
#include "xserver-remote.h"
 
17
#include "xsession.h"
 
18
 
 
19
G_DEFINE_TYPE (SeatXRemote, seat_xremote, SEAT_TYPE);
 
20
 
 
21
static void
 
22
seat_xremote_setup (Seat *seat)
 
23
{
 
24
    seat_set_can_switch (seat, FALSE);
 
25
    SEAT_CLASS (seat_xremote_parent_class)->setup (seat);
 
26
}
 
27
 
 
28
static DisplayServer *
 
29
seat_xremote_create_display_server (Seat *seat)
 
30
{
 
31
    XServerRemote *xserver;
 
32
    const gchar *hostname;
 
33
    gint number;
 
34
 
 
35
    hostname = seat_get_string_property (seat, "xserver-hostname");
 
36
    if (!hostname)
 
37
        hostname = "localhost";
 
38
    number = seat_get_integer_property (seat, "xserver-display-number");
 
39
 
 
40
    g_debug ("Starting remote X display %s:%d", hostname, number);
 
41
 
 
42
    xserver = xserver_remote_new (hostname, number, NULL);
 
43
 
 
44
    return DISPLAY_SERVER (xserver);
 
45
}
 
46
 
 
47
static Session *
 
48
seat_xremote_create_session (Seat *seat, Display *display)
 
49
{
 
50
    XServerRemote *xserver;
 
51
    XSession *session;
 
52
 
 
53
    xserver = XSERVER_REMOTE (display_get_display_server (display));
 
54
 
 
55
    session = xsession_new (XSERVER (xserver));
 
56
    session_set_remote_host_name (SESSION (session), xserver_get_hostname (XSERVER (xserver)));
 
57
 
 
58
    return SESSION (session);
 
59
}
 
60
 
 
61
static void
 
62
seat_xremote_run_script (Seat *seat, Display *display, Process *script)
 
63
{
 
64
    XServerRemote *xserver;
 
65
 
 
66
    xserver = XSERVER_REMOTE (display_get_display_server (display));
 
67
    process_set_env (script, "DISPLAY", xserver_get_address (XSERVER (xserver)));  
 
68
    process_set_env (script, "REMOTE_HOST", xserver_get_hostname (XSERVER (xserver)));
 
69
 
 
70
    SEAT_CLASS (seat_xremote_parent_class)->run_script (seat, display, script);
 
71
}
 
72
 
 
73
static void
 
74
seat_xremote_display_removed (Seat *seat, Display *display)
 
75
{
 
76
    /* Can't restart the display, so remove this seat */
 
77
    seat_stop (seat);
 
78
}
 
79
 
 
80
static void
 
81
seat_xremote_init (SeatXRemote *seat)
 
82
{
 
83
}
 
84
 
 
85
static void
 
86
seat_xremote_class_init (SeatXRemoteClass *klass)
 
87
{
 
88
    SeatClass *seat_class = SEAT_CLASS (klass);
 
89
 
 
90
    seat_class->setup = seat_xremote_setup;
 
91
    seat_class->create_display_server = seat_xremote_create_display_server;
 
92
    seat_class->create_session = seat_xremote_create_session;
 
93
    seat_class->run_script = seat_xremote_run_script;
 
94
    seat_class->display_removed = seat_xremote_display_removed;
 
95
}