aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Gabriel <mike.gabriel@das-netzwerkteam.de>2017-10-26 14:30:54 +0200
committerMike Gabriel <mike.gabriel@das-netzwerkteam.de>2017-10-26 14:33:21 +0200
commit164a06e66ee8197fd8bf3201591ab590956888da (patch)
tree27cb6cccb773606b15f8c8028e6ddc06988fe8d7
parentf192e262ea6d9905d29cf9ad8b0e76f463f9f475 (diff)
downloadarctica-greeter-164a06e66ee8197fd8bf3201591ab590956888da.tar.gz
arctica-greeter-164a06e66ee8197fd8bf3201591ab590956888da.tar.bz2
arctica-greeter-164a06e66ee8197fd8bf3201591ab590956888da.zip
Explicitly set the keyboard layout
Ported from slick-greeter: Author: Clement Lefebvre <clement.lefebvre@linuxmint.com> Date: Sat Jun 10 15:57:49 2017 +0100 Explicitly set the keyboard layout The keyboard layout isn't properly set by default in some case. This affects wireless Logitech keyboards in particular, and it results in the greeter using an American layout instead of the layout chosen during the installation.
-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;
}