aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am3
-rwxr-xr-xarctica-greeter-set-keyboard-layout53
-rw-r--r--debian/arctica-greeter.install1
-rw-r--r--debian/control1
-rw-r--r--src/Makefile.am1
-rw-r--r--src/arctica-greeter.vala13
-rw-r--r--src/config.vapi1
7 files changed, 72 insertions, 1 deletions
diff --git a/Makefile.am b/Makefile.am
index 3858682..9c08fa5 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -9,7 +9,8 @@ sbin_SCRIPTS = arctica-guest-account-script
pkglibexec_SCRIPTS = lightdm-arctica-greeter-session \
arctica-guest-session-auto.sh \
- arctica-guest-session-setup.sh
+ arctica-guest-session-setup.sh \
+ arctica-greeter-set-keyboard-layout
EXTRA_DIST = \
autogen.sh \
diff --git a/arctica-greeter-set-keyboard-layout b/arctica-greeter-set-keyboard-layout
new file mode 100755
index 0000000..a71cde2
--- /dev/null
+++ b/arctica-greeter-set-keyboard-layout
@@ -0,0 +1,53 @@
+#!/usr/bin/python3
+
+import sys
+import os
+import syslog
+import subprocess
+
+if __name__ == '__main__':
+
+ try:
+
+ # Exit if something is missing
+ for required_file in ["/etc/default/keyboard", "/usr/bin/setxkbmap"]:
+ if not os.path.exists(required_file):
+ syslog.syslog("%s not found." % required_file)
+ sys.exit(0)
+
+ # Log current keyboard configuration
+ output = subprocess.check_output(["setxkbmap", "-query"]).decode("UTF-8")
+ syslog.syslog("Current keyboard configuration: %s" % output)
+
+ # Parse keyboard configuration file
+ XKBMODEL = ""
+ XKBLAYOUT = ""
+ XKBVARIANT = ""
+ XKBOPTIONS = ""
+ with open("/etc/default/keyboard", "r") as keyboard:
+ for line in keyboard:
+ line = line.strip()
+ if "XKBMODEL=" in line:
+ XKBMODEL = line.split('=')[1].replace('"', '')
+ if "XKBLAYOUT=" in line:
+ XKBLAYOUT = line.split('=')[1].replace('"', '')
+ if "XKBVARIANT=" in line:
+ XKBVARIANT = line.split('=')[1].replace('"', '')
+ if "XKBOPTIONS=" in line:
+ XKBOPTIONS = line.split('=')[1].replace('"', '')
+
+ # Apply keyboard configuration
+ command = ["setxkbmap", "-model", XKBMODEL, "-layout", XKBLAYOUT, "-variant", XKBVARIANT, "-option", XKBOPTIONS, "-v"]
+ syslog.syslog("Applying keyboard configuration: %s" % command)
+ output = subprocess.check_output(command).decode("UTF-8")
+ syslog.syslog("Result: %s" % output)
+
+ # Log new keyboard configuration
+ output = subprocess.check_output(["setxkbmap", "-query"]).decode("UTF-8")
+ syslog.syslog("New keyboard configuration: %s" % output)
+
+ except Exception as e:
+ # best effort, syslog it and bail out
+ syslog.syslog("ERROR: %s" % e)
+
+ sys.exit(0)
diff --git a/debian/arctica-greeter.install b/debian/arctica-greeter.install
index 1bbb38a..a6be53b 100644
--- a/debian/arctica-greeter.install
+++ b/debian/arctica-greeter.install
@@ -10,4 +10,5 @@ usr/share/man/
usr/share/sounds/
usr/share/xgreeters/
usr/lib/*/arctica-greeter/lightdm-arctica-greeter-session
+usr/lib/*/arctica-greeter/arctica-greeter-set-keyboard-layout
var/lib/polkit-1/localauthority/10-vendor.d/arctica-greeter.pkla
diff --git a/debian/control b/debian/control
index 7f0327c..6ba3d27 100644
--- a/debian/control
+++ b/debian/control
@@ -40,6 +40,7 @@ Depends: ${misc:Depends},
numix-icon-theme,
mate-settings-daemon,
systemd,
+ python3,
Recommends: ayatana-indicator-application,
ayatana-indicator-datetime,
ayatana-indicator-keyboard,
diff --git a/src/Makefile.am b/src/Makefile.am
index ec75868..9f16db6 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -46,6 +46,7 @@ arctica_greeter_CFLAGS = \
-DLOCALEDIR=\""$(localedir)"\" \
-DVERSION=\"$(VERSION)\" \
-DPKGDATADIR=\""$(pkgdatadir)"\" \
+ -DPKGLIBEXECDIR=\""$(pkglibexecdir)"\" \
-DINDICATORDIR=\""$(INDICATORDIR)"\"
logo_generator_CFLAGS = $(arctica_greeter_CFLAGS)
diff --git a/src/arctica-greeter.vala b/src/arctica-greeter.vala
index 94a1eb0..2def301 100644
--- a/src/arctica-greeter.vala
+++ b/src/arctica-greeter.vala
@@ -580,6 +580,16 @@ public class ArcticaGreeter
greeter_ready ();
}
+ private static void set_keyboard_layout ()
+ {
+ try {
+ Process.spawn_command_line_sync(Path.build_filename (Config.PKGLIBEXECDIR, "arctica-greeter-set-keyboard-layout"), null, null, null);
+ }
+ catch (Error e){
+ warning ("Error while setting the keyboard layout: %s", e.message);
+ }
+ }
+
private static void activate_numlock ()
{
try {
@@ -651,6 +661,9 @@ public class ArcticaGreeter
if (do_test_mode)
debug ("Running in test mode");
+ /* Set the keyboard layout */
+ set_keyboard_layout ();
+
/* Set the numlock state */
if (AGSettings.get_boolean (AGSettings.KEY_ACTIVATE_NUMLOCK)) {
debug ("Activating numlock");
diff --git a/src/config.vapi b/src/config.vapi
index c2e8d96..1aca0b9 100644
--- a/src/config.vapi
+++ b/src/config.vapi
@@ -6,6 +6,7 @@ namespace Config
public const string VERSION;
public const string INDICATOR_FILE_DIR;
public const string PKGDATADIR;
+ public const string PKGLIBEXECDIR;
public const string INDICATORDIR;
public const string SD_BINARY;
}