Mageia Bugzilla – Attachment 4115 Details for
Bug 10458
add systemd/dbus support to drakkeyboard
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
New Account
|
Forgot Password
[patch]
patch that adds systemd (localectl keyboard info) support to drakkeyboard
drakkeyboard-systemd-support.patch (text/plain), 3.03 KB, created by
Pablo Saratxaga
on 2013-06-08 03:12:35 CEST
(
hide
)
Description:
patch that adds systemd (localectl keyboard info) support to drakkeyboard
Filename:
MIME Type:
Creator:
Pablo Saratxaga
Created:
2013-06-08 03:12:35 CEST
Size:
3.03 KB
patch
obsolete
>--- /usr/lib/libDrakX/keyboard.pm_bak 2013-06-08 00:11:29.232753550 +0200 >+++ /usr/lib/libDrakX/keyboard.pm 2013-06-08 02:38:14.339488612 +0200 >@@ -18,6 +18,7 @@ > #- Globals > #-###################################################################################### > my $KMAP_MAGIC = 0x8B39C07F; >+my $localectl = "/usr/bin/localectl"; > > #- a best guess of the keyboard layout, based on the choosen locale > #- beware only the first 5 characters of the locale are used >@@ -369,6 +370,16 @@ > sub keyboard2text { _keyboard2one($_[0], 0) } > sub keyboard2kmap { _keyboard2one($_[0], 1) } > sub _keyboard2xkb { _keyboard2one($_[0], 2) } >+sub _xkb2keyboardkey { >+ my ($xkb) = @_; >+ $xkb =~ s/^us,(.*)$/$1/; >+ $xkb =~ /n\/a/ and return; >+ my $keyboardkey = "custom"; >+ foreach (keys %keyboards) { >+ $keyboards{$_}[2] eq $xkb and $keyboardkey = $_, last; >+ } >+ $keyboardkey; >+} > > sub xkb_models() { > my $models = _parse_xkb_rules()->{model}; >@@ -615,7 +626,6 @@ > delete $keyboard->{unsafe}; > $keyboard->{KEYTABLE} = keyboard2kmap($keyboard); > >- setVarsInSh("$::prefix/etc/sysconfig/keyboard", $keyboard); > if (arch() =~ /ppc/) { > my $s = "dev.mac_hid.keyboard_sends_linux_keycodes = 1\n"; > substInFile { >@@ -625,7 +635,15 @@ > } else { > run_program::rooted($::prefix, 'dumpkeys', '>', '/etc/sysconfig/console/default.kmap') or log::l("dumpkeys failed"); > } >- run_program::run('mageia-setup-keyboard'); >+ if (-x $localectl) { # systemd service >+ run_program::run($localectl, '--no-convert', 'set-keymap', >+ $keyboard->{KEYTABLE}, $keyboard->{GRP_TOGGLE}); >+ run_program::run($localectl, '--no-convert', 'set-x11-keymap', >+ $keyboard->{XkbLayout}, $keyboard->{XkbModel}, $keyboard->{XkbVariant}, $keyboard->{XkbOptions}); >+ } else { >+ setVarsInSh("$::prefix/etc/sysconfig/keyboard", $keyboard); >+ run_program::run('mageia-setup-keyboard'); >+ } > } > > sub configure_and_set_standalone { >@@ -638,7 +656,25 @@ > } > > sub read() { >- my %keyboard = getVarsFromSh("$::prefix/etc/sysconfig/keyboard") or return; >+ local $ENV{LANGUAGE} = 'C'; >+ my %keyboard; >+ if (-x $timedatectl) { # systemd dbus based service >+ foreach (run_program::rooted_get_stdout($::prefix, $timedatectl)) { >+ /^ *VC Keymap: (.*)$/ and $keyboard{KEYTABLE} = $1; >+ /^ *VC Toggle Keymap: (.*)$/ and $keyboard{GRP_TOGGLE} = $1; >+ /^ *X11 Layout: (.*)$/ and $keyboard{XkbLayout} = $1; >+ /^ *X11 Model: (.*)$/ and $keyboard{XkbModel} = $1; >+ /^ *X11 Variant: (.*)$/ and $keyboard{XkbVariant} = $1; >+ /^ *X11 Options: (.*)$/ and $keyboard{XkbOptions} = $1; >+ } >+ $keyboard{KEYBOARD} = _xkb2keyboardkey($keyboard{XkbLayout}); >+ # if keyboard not defined, we fallback to old config file >+ if ($keyboard{XkbModel} =~ m/n\/a/ || $keyboard{KEYTABLE} =~ m/n\/a/ ) { >+ %keyboard = getVarsFromSh("$::prefix/etc/sysconfig/keyboard") or return; >+ } >+ } else { >+ %keyboard = getVarsFromSh("$::prefix/etc/sysconfig/keyboard") or return; >+ } > if (!$keyboard{KEYBOARD}) { > add2hash(\%keyboard, grep { keyboard2kmap($_) eq $keyboard{KEYTABLE} } _keyboards()); > }
--- /usr/lib/libDrakX/keyboard.pm_bak 2013-06-08 00:11:29.232753550 +0200 +++ /usr/lib/libDrakX/keyboard.pm 2013-06-08 02:38:14.339488612 +0200 @@ -18,6 +18,7 @@ #- Globals #-###################################################################################### my $KMAP_MAGIC = 0x8B39C07F; +my $localectl = "/usr/bin/localectl"; #- a best guess of the keyboard layout, based on the choosen locale #- beware only the first 5 characters of the locale are used @@ -369,6 +370,16 @@ sub keyboard2text { _keyboard2one($_[0], 0) } sub keyboard2kmap { _keyboard2one($_[0], 1) } sub _keyboard2xkb { _keyboard2one($_[0], 2) } +sub _xkb2keyboardkey { + my ($xkb) = @_; + $xkb =~ s/^us,(.*)$/$1/; + $xkb =~ /n\/a/ and return; + my $keyboardkey = "custom"; + foreach (keys %keyboards) { + $keyboards{$_}[2] eq $xkb and $keyboardkey = $_, last; + } + $keyboardkey; +} sub xkb_models() { my $models = _parse_xkb_rules()->{model}; @@ -615,7 +626,6 @@ delete $keyboard->{unsafe}; $keyboard->{KEYTABLE} = keyboard2kmap($keyboard); - setVarsInSh("$::prefix/etc/sysconfig/keyboard", $keyboard); if (arch() =~ /ppc/) { my $s = "dev.mac_hid.keyboard_sends_linux_keycodes = 1\n"; substInFile { @@ -625,7 +635,15 @@ } else { run_program::rooted($::prefix, 'dumpkeys', '>', '/etc/sysconfig/console/default.kmap') or log::l("dumpkeys failed"); } - run_program::run('mageia-setup-keyboard'); + if (-x $localectl) { # systemd service + run_program::run($localectl, '--no-convert', 'set-keymap', + $keyboard->{KEYTABLE}, $keyboard->{GRP_TOGGLE}); + run_program::run($localectl, '--no-convert', 'set-x11-keymap', + $keyboard->{XkbLayout}, $keyboard->{XkbModel}, $keyboard->{XkbVariant}, $keyboard->{XkbOptions}); + } else { + setVarsInSh("$::prefix/etc/sysconfig/keyboard", $keyboard); + run_program::run('mageia-setup-keyboard'); + } } sub configure_and_set_standalone { @@ -638,7 +656,25 @@ } sub read() { - my %keyboard = getVarsFromSh("$::prefix/etc/sysconfig/keyboard") or return; + local $ENV{LANGUAGE} = 'C'; + my %keyboard; + if (-x $timedatectl) { # systemd dbus based service + foreach (run_program::rooted_get_stdout($::prefix, $timedatectl)) { + /^ *VC Keymap: (.*)$/ and $keyboard{KEYTABLE} = $1; + /^ *VC Toggle Keymap: (.*)$/ and $keyboard{GRP_TOGGLE} = $1; + /^ *X11 Layout: (.*)$/ and $keyboard{XkbLayout} = $1; + /^ *X11 Model: (.*)$/ and $keyboard{XkbModel} = $1; + /^ *X11 Variant: (.*)$/ and $keyboard{XkbVariant} = $1; + /^ *X11 Options: (.*)$/ and $keyboard{XkbOptions} = $1; + } + $keyboard{KEYBOARD} = _xkb2keyboardkey($keyboard{XkbLayout}); + # if keyboard not defined, we fallback to old config file + if ($keyboard{XkbModel} =~ m/n\/a/ || $keyboard{KEYTABLE} =~ m/n\/a/ ) { + %keyboard = getVarsFromSh("$::prefix/etc/sysconfig/keyboard") or return; + } + } else { + %keyboard = getVarsFromSh("$::prefix/etc/sysconfig/keyboard") or return; + } if (!$keyboard{KEYBOARD}) { add2hash(\%keyboard, grep { keyboard2kmap($_) eq $keyboard{KEYTABLE} } _keyboards()); }
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 10458
:
4114
| 4115