diff options
author | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2017-10-26 14:30:54 +0200 |
---|---|---|
committer | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2017-10-26 14:33:21 +0200 |
commit | 164a06e66ee8197fd8bf3201591ab590956888da (patch) | |
tree | 27cb6cccb773606b15f8c8028e6ddc06988fe8d7 /arctica-greeter-set-keyboard-layout | |
parent | f192e262ea6d9905d29cf9ad8b0e76f463f9f475 (diff) | |
download | arctica-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.
Diffstat (limited to 'arctica-greeter-set-keyboard-layout')
-rwxr-xr-x | arctica-greeter-set-keyboard-layout | 53 |
1 files changed, 53 insertions, 0 deletions
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) |