diff options
-rw-r--r-- | Makefile.am | 3 | ||||
-rwxr-xr-x | arctica-greeter-set-keyboard-layout | 53 | ||||
-rw-r--r-- | debian/arctica-greeter.install | 1 | ||||
-rw-r--r-- | debian/control | 1 | ||||
-rw-r--r-- | src/Makefile.am | 1 | ||||
-rw-r--r-- | src/arctica-greeter.vala | 13 | ||||
-rw-r--r-- | src/config.vapi | 1 |
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; } |