%PDF- %PDF-
Direktori : /var/lib/dpkg/info/ |
Current File : //var/lib/dpkg/info/keyboard-configuration.config |
#!/bin/sh # Copyright © 2005 Anton Zinoviev <anton@lml.bas.bg> # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # If you have not received a copy of the GNU General Public License # along with this program, write to the Free Software Foundation, Inc., # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # ---------- # CONTENTS # ---------- # # 1. Define the auxiliary functions db_default, regex_excape, # regex_pattern_escape and regex_unescape. # # 2. Define the function all_kbdnames listing all supported keyboard # models, layouts and variants and a function keyboard_present # testing whether the computer has at least one keyboard # # 3. Function ask_debconf. Ask the user to choose amongst the options # listed in $kbdnames. # # 4. Function guess_arch - detect the architecture and subarchitecture # # 5. Function keyboard_present - test if the computer has at least one keyboard # # 6. Set $locale. Extract the strings for the chosen language in $kbdnames. # # 7. Compute default values for $XKBMODEL, $XKBLAYOUT, $XKBVARIANT # based on the architecture and the locale. # # 8. Overwrite (some of) the computed default values by: # - preseeded values (for the udeb); # - the value of debian-installer/keymap # - the contents of /etc/X11/xorg.conf # - the settings in the configuration files (/etc/default/...). # - correct some bugs of previous versions of console-setup # # 9. If the computer doesn't have keyboard then do not ask questions, # simply store the default values in the configuration file. This # is in order to support headless installs in d-i. The regular # packages (console-setup and console-setup-mini) should not be # installed on such sistems. # # 10. Compute default values for the Debconf questions. For example # from XKBLAYOUT=us,el we obtain debconf_layout=el and from # XKBOPTIONS=lv3:ralt_switch we obtain debconf_altgr='Right Alt (AltGr)' # # 11. Ask the Debconf questions starting from STATE=1. set -e . /usr/share/debconf/confmodule db_capb backup CONFIGFILE=/etc/default/keyboard OLDCONFIGFILE=/etc/default/console-setup debconf_toggle='' debconf_switch='' debconf_altgr='' debconf_compose='' debconf_layout='' debconf_variant='' XKBMODEL='' XKBLAYOUT='' XKBVARIANT='' XKBOPTIONS='' CAPB="$RET" detect_keyboard=false case $CAPB in *plugin-detect-keyboard*) detect_keyboard=: ;; esac if [ -f /usr/share/console-setup/keyboard-configuration.config ]; then is_debian_installer=yes is_not_debian_installer='' else is_debian_installer='' is_not_debian_installer=yes fi ###################################################################### # Define auxiliary the functions db_default, regex_excape, # regex_pattern_escape, regex_unescape, and read_config. ###################################################################### read_config() { [ -r $1 ] || return 0 . $1 || true # Treat missing XKBOPTIONS as empty, other vars have sane defaults: for var in XKBOPTIONS; do if ! grep "^ *${var}=" $1 >/dev/null; then eval ${var}="" fi done } which () { local IFS IFS=: for i in $PATH; do if [ -f "$i/$1" -a -x "$i/$1" ]; then echo "$i/$1" return 0 fi done return 1 } # Store default value into debconf db. Workaround #352697. db_default () { db_get keyboard-configuration/store_defaults_in_debconf_db if [ "$RET" = true ]; then db_set $1 "$2" fi } regex_escape () { sed \ -e 's/[.]/%period%/g' \ -e 's/\[/%lbracket%/g' \ -e 's/\]/%rbracket%/g' \ -e 's/\^/%caret%/g' \ -e 's/\$/%dollar%/g' \ -e 's/\\/%bslash%/g' \ -e 's/[/]/%slash%/g' \ -e 's/[?]/%question%/g' \ -e 's/[+]/%plus%/g' } regex_pattern_escape () { sed \ -e 's/[.]/%period%/g' \ -e 's/\[/%lbracket%/g' \ -e 's/\]/%rbracket%/g' \ -e 's/\^/%caret%/g' \ -e 's/\$/%dollar%/g' \ -e 's/\\/%bslash%/g' \ -e 's/[/]/%slash%/g' \ -e 's/[?]/%question%/g' \ -e 's/[+]/%plus%/g' \ -e 's/[*]/\\*/g' } regex_unescape () { sed \ -e 's/%period%/./g' \ -e 's/%lbracket%/[/g' \ -e 's/%rbracket%/]/g' \ -e 's/%caret%/^/g' \ -e 's/%dollar%/$/g' \ -e 's/%bslash%/\\/g' \ -e 's/%slash%/\//g' \ -e 's/%question%/?/g' \ -e 's/%plus%/+/g' } ###################################################################### # Define the function all_kbdnames listing all supported keyboard # models, layouts and variants and a function keyboard_present # testing whether the computer has at least one keyboard ###################################################################### all_kbdnames () { cat <<'EOF' C*model*a4techKB21*A4Tech KB-21 C*model*a4techKBS8*A4Tech KBS-8 C*model*a4_rfkb23*A4Tech Wireless Desktop RFKB-23 C*model*airkey*Acer AirKey V C*model*acer_c300*Acer C300 C*model*acer_ferrari4k*Acer Ferrari 4000 C*model*acer_laptop*Acer laptop C*model*scorpius*Advance Scorpius KI C*model*amiga*Amiga C*model*apple*Apple C*model*applealu_ansi*Apple Aluminium (ANSI) C*model*applealu_iso*Apple Aluminium (ISO) C*model*applealu_jis*Apple Aluminium (JIS) C*model*apple_laptop*Apple laptop C*model*asus_laptop*Asus laptop C*model*ataritt*Atari TT C*model*azonaRF2300*Azona RF2300 Wireless Internet C*model*btc5090*BTC 5090 C*model*btc5113rf*BTC 5113RF Multimedia C*model*btc5126t*BTC 5126T C*model*btc6301urf*BTC 6301URF C*model*btc9000*BTC 9000 C*model*btc9000a*BTC 9000A C*model*btc9001ah*BTC 9001AH C*model*btc9019u*BTC 9019U C*model*btc9116u*BTC 9116U Mini Wireless Internet and Gaming C*model*benqx*BenQ X-Touch C*model*benqx730*BenQ X-Touch 730 C*model*benqx800*BenQ X-Touch 800 C*model*brother*Brother Internet C*model*cherrybunlim*Cherry B.UNLIMITED C*model*cherryblue*Cherry Blue Line CyBo@rd C*model*cherrybluea*Cherry Blue Line CyBo@rd (alt.) C*model*cherrycyboard*Cherry CyBo@rd USB-Hub C*model*cherrycmexpert*Cherry CyMotion Expert C*model*cymotionlinux*Cherry CyMotion Master Linux C*model*cherryblueb*Cherry CyMotion Master XPress C*model*chicony*Chicony Internet C*model*chicony9885*Chicony KB-9885 C*model*chicony0108*Chicony KU-0108 C*model*chicony0420*Chicony KU-0420 C*model*chromebook*Chromebook C*model*classmate*Classmate PC C*model*armada*Compaq Armada laptop C*model*compaqeak8*Compaq Easy Access C*model*compaqik13*Compaq Internet (13 keys) C*model*compaqik18*Compaq Internet (18 keys) C*model*compaqik7*Compaq Internet (7 keys) C*model*presario*Compaq Presario laptop C*model*ipaq*Compaq iPaq C*model*creativedw7000*Creative Desktop Wireless 7000 C*model*dtk2000*DTK2000 C*model*dell*Dell C*model*dell101*Dell 101-key PC C*model*inspiron*Dell Inspiron 6000/8000 laptop C*model*latitude*Dell Latitude laptop C*model*precision_m*Dell Precision M laptop C*model*dellm65*Dell Precision M65 laptop C*model*dellsk8125*Dell SK-8125 C*model*dellsk8135*Dell SK-8135 C*model*dellusbmm*Dell USB Multimedia C*model*dexxa*Dexxa Wireless Desktop C*model*diamond*Diamond 9801/9802 C*model*SKIP*Do not configure keyboard; keep kernel keymap C*model*ennyah_dkb1008*Ennyah DKB-1008 C*model*everex*Everex STEPnote C*model*compalfl90*FL90 C*model*fscaa1667g*Fujitsu-Siemens Amilo laptop C*model*pc101*Generic 101-key PC C*model*pc102*Generic 102-key PC C*model*pc104*Generic 104-key PC C*model*pc104alt*Generic 104-key PC with L-shaped Enter key C*model*pc105*Generic 105-key PC C*model*pc86*Generic 86-key PC C*model*geniuscomfy*Genius Comfy KB-12e C*model*genius*Genius Comfy KB-16M/Multimedia KWD-910 C*model*geniuscomfy2*Genius Comfy KB-21e-Scroll C*model*geniuskb19e*Genius KB-19e NB C*model*geniuskkb2050hs*Genius KKB-2050HS C*model*gyration*Gyration C*model*hhk*Happy Hacking C*model*macintosh_hhk*Happy Hacking for Mac C*model*hpi6*Hewlett-Packard Internet C*model*hpmini110*Hewlett-Packard Mini 110 laptop C*model*hp250x*Hewlett-Packard NEC SK-2500 Multimedia C*model*hp5xx*Hewlett-Packard Omnibook 500 C*model*hp500fa*Hewlett-Packard Omnibook 500 FA C*model*hp6000*Hewlett-Packard Omnibook 6000/6100 C*model*hpxe3gc*Hewlett-Packard Omnibook XE3 GC C*model*hpxe3gf*Hewlett-Packard Omnibook XE3 GF C*model*hpxt1000*Hewlett-Packard Omnibook XT1000 C*model*hpzt11xx*Hewlett-Packard Pavilion ZT1100 C*model*hpdv5*Hewlett-Packard Pavilion dv5 C*model*hpnx9020*Hewlett-Packard nx9020 C*model*honeywell_euroboard*Honeywell Euroboard C*model*rapidaccess*IBM Rapid Access C*model*rapidaccess2*IBM Rapid Access II C*model*ibm_spacesaver*IBM Space Saver C*model*thinkpad*IBM ThinkPad 560Z/600/600E/A22E C*model*thinkpad60*IBM ThinkPad R60/T60/R61/T61 C*model*thinkpadz60*IBM ThinkPad Z60m/Z60t/Z61m/Z61t C*model*flexpro*Keytronic FlexPro C*model*kinesis*Kinesis C*model*logitech_base*Logitech C*model*logiaccess*Logitech Access C*model*logicd*Logitech Cordless Desktop C*model*logicda*Logitech Cordless Desktop (alt.) C*model*logiex110*Logitech Cordless Desktop EX110 C*model*logiclx300*Logitech Cordless Desktop LX-300 C*model*logicdn*Logitech Cordless Desktop Navigator C*model*logicd_opt*Logitech Cordless Desktop Optical C*model*logicdpa2*Logitech Cordless Desktop Pro (2nd alt.) C*model*logicd_it*Logitech Cordless Desktop iTouch C*model*logicfn*Logitech Cordless Freedom/Desktop Navigator C*model*logitech_g15*Logitech G15 extra keys via G15daemon C*model*logiik*Logitech Internet C*model*logimel*Logitech Internet 350 C*model*logicink*Logitech Internet Navigator C*model*logiultrax*Logitech Ultra-X C*model*logiultraxc*Logitech Ultra-X Cordless Media Desktop C*model*logidinovo*Logitech diNovo C*model*logidinovoedge*Logitech diNovo Edge C*model*itouch*Logitech iTouch C*model*logiitc*Logitech iTouch Cordless Y-RB6 C*model*logiinkse*Logitech iTouch Internet Navigator SE C*model*logiinkseusb*Logitech iTouch Internet Navigator SE USB C*model*macbook78*MacBook/MacBook Pro C*model*macbook79*MacBook/MacBook Pro (intl.) C*model*macintosh*Macintosh C*model*macintosh_old*Macintosh Old C*model*mx1998*Memorex MX1998 C*model*mx2500*Memorex MX2500 EZ-Access C*model*mx2750*Memorex MX2750 C*model*microsoftccurve2k*Microsoft Comfort Curve 2000 C*model*microsoftinet*Microsoft Internet C*model*microsoftprose*Microsoft Internet Pro (Swedish) C*model*microsoft*Microsoft Natural C*model*microsoftelite*Microsoft Natural Elite C*model*microsoft4000*Microsoft Natural Ergonomic 4000 C*model*microsoftprooem*Microsoft Natural Pro OEM C*model*microsoftprousb*Microsoft Natural Pro USB/Internet Pro C*model*microsoftpro*Microsoft Natural Pro/Internet Pro C*model*microsoft7000*Microsoft Natural Wireless Ergonomic 7000 C*model*microsoftoffice*Microsoft Office Keyboard C*model*microsoftsurface*Microsoft Surface C*model*microsoftmult*Microsoft Wireless Multimedia 1.0A C*model*sk1300*NEC SK-1300 C*model*sk2500*NEC SK-2500 C*model*sk6200*NEC SK-6200 C*model*sk7100*NEC SK-7100 C*model*omnikey101*Northgate OmniKey 101 C*model*olpc*OLPC C*model*oretec*Ortek Multimedia/Internet MCK-800 C*model*pc98*PC-98 C*model*propeller*Propeller Voyager KTEZ-1000 C*model*qtronix*QTronix Scorpius 98N+ C*model*sven*SVEN Ergonomic 2500 C*model*sven303*SVEN Slim 303 C*model*samsung4500*Samsung SDM 4500P C*model*samsung4510*Samsung SDM 4510P C*model*sanwaskbkg3*Sanwa Supply SKB-KG3 C*model*silvercrest*Silvercrest Multimedia Wireless C*model*apex300*SteelSeries Apex 300 (Apex RAW) C*model*sun4*Sun Type 4 C*model*sun5*Sun Type 5 C*model*sun_type6_jp*Sun Type 6 (Japanese) C*model*sun_type6_jp_usb*Sun Type 6 USB (Japanese) C*model*sun_type6_unix_usb*Sun Type 6 USB (Unix) C*model*sun_type6_usb*Sun Type 6/7 USB C*model*sun_type6_euro_usb*Sun Type 6/7 USB (European) C*model*sun_type7_usb*Sun Type 7 USB C*model*sun_type7_euro_usb*Sun Type 7 USB (European) C*model*sun_type7_jp_usb*Sun Type 7 USB (Japanese)/Japanese 106-key C*model*sun_type7_unix_usb*Sun Type 7 USB (Unix) C*model*sp_inet*Super Power Multimedia C*model*symplon*Symplon PaceBook tablet C*model*targa_v811*Targa Visionary 811 C*model*toshiba_s3000*Toshiba Satellite S3000 C*model*teck227*Truly Ergonomic 227 C*model*teck229*Truly Ergonomic 229 C*model*trustda*Trust Direct Access C*model*trust_slimline*Trust Slimline C*model*trust*Trust Wireless Classic C*model*tm2020*TypeMatrix EZ-Reach 2020 C*model*tm2030PS2*TypeMatrix EZ-Reach 2030 PS2 C*model*tm2030USB*TypeMatrix EZ-Reach 2030 USB C*model*tm2030USB-102*TypeMatrix EZ-Reach 2030 USB (102/105:EU mode) C*model*tm2030USB-106*TypeMatrix EZ-Reach 2030 USB (106:JP mode) C*model*unitekkb1925*Unitek KB-1925 C*model*vsonku306*ViewSonic KU-306 Internet C*model*winbook*Winbook Model XP5 C*model*yahoo*Yahoo! Internet C*model*emachines*eMachines m6800 laptop C*layout*custom*A user-defined custom Layout C*variant*custom**A user-defined custom Layout C*layout*af*Afghani C*variant*af**Afghani C*variant*af*ps*Afghani - Pashto C*variant*af*olpc-ps*Afghani - Pashto (Afghanistan, OLPC) C*variant*af*fa-olpc*Afghani - Persian (Afghanistan, Dari OLPC) C*variant*af*uz*Afghani - Uzbek (Afghanistan) C*variant*af*uz-olpc*Afghani - Uzbek (Afghanistan, OLPC) C*layout*al*Albanian C*variant*al**Albanian C*variant*al*plisi*Albanian - Albanian (Plisi) C*variant*al*veqilharxhi*Albanian - Albanian (Veqilharxhi) C*layout*et*Amharic C*variant*et**Amharic C*layout*ara*Arabic C*variant*ara**Arabic C*variant*ara*azerty*Arabic - Arabic (AZERTY) C*variant*ara*azerty_digits*Arabic - Arabic (AZERTY, Eastern Arabic numerals) C*variant*ara*buckwalter*Arabic - Arabic (Buckwalter) C*variant*ara*digits*Arabic - Arabic (Eastern Arabic numerals) C*variant*ara*mac*Arabic - Arabic (Macintosh) C*variant*ara*olpc*Arabic - Arabic (OLPC) C*variant*ara*qwerty*Arabic - Arabic (QWERTY) C*variant*ara*qwerty_digits*Arabic - Arabic (QWERTY, Eastern Arabic numerals) C*layout*ma*Arabic (Morocco) C*variant*ma**Arabic (Morocco) C*variant*ma*tifinagh-alt*Arabic (Morocco) - Berber (Morocco, Tifinagh alt.) C*variant*ma*tifinagh-extended-phonetic*Arabic (Morocco) - Berber (Morocco, Tifinagh extended phonetic) C*variant*ma*tifinagh-extended*Arabic (Morocco) - Berber (Morocco, Tifinagh extended) C*variant*ma*tifinagh-phonetic*Arabic (Morocco) - Berber (Morocco, Tifinagh phonetic) C*variant*ma*tifinagh-alt-phonetic*Arabic (Morocco) - Berber (Morocco, Tifinagh phonetic, alt.) C*variant*ma*tifinagh*Arabic (Morocco) - Berber (Morocco, Tifinagh) C*variant*ma*french*Arabic (Morocco) - French (Morocco) C*layout*sy*Arabic (Syria) C*variant*sy**Arabic (Syria) C*variant*sy*ku_f*Arabic (Syria) - Kurdish (Syria, F) C*variant*sy*ku_alt*Arabic (Syria) - Kurdish (Syria, Latin Alt-Q) C*variant*sy*ku*Arabic (Syria) - Kurdish (Syria, Latin Q) C*variant*sy*syc*Arabic (Syria) - Syriac C*variant*sy*syc_phonetic*Arabic (Syria) - Syriac (phonetic) C*layout*am*Armenian C*variant*am**Armenian C*variant*am*eastern-alt*Armenian - Armenian (alt. eastern) C*variant*am*phonetic-alt*Armenian - Armenian (alt. phonetic) C*variant*am*eastern*Armenian - Armenian (eastern) C*variant*am*phonetic*Armenian - Armenian (phonetic) C*variant*am*western*Armenian - Armenian (western) C*layout*az*Azerbaijani C*variant*az**Azerbaijani C*variant*az*cyrillic*Azerbaijani - Azerbaijani (Cyrillic) C*layout*ml*Bambara C*variant*ml**Bambara C*variant*ml*us-mac*Bambara - English (Mali, US, Macintosh) C*variant*ml*us-intl*Bambara - English (Mali, US, intl.) C*variant*ml*fr-oss*Bambara - French (Mali, alt.) C*layout*bd*Bangla C*variant*bd**Bangla C*variant*bd*probhat*Bangla - Bangla (Probhat) C*layout*by*Belarusian C*variant*by**Belarusian C*variant*by*latin*Belarusian - Belarusian (Latin) C*variant*by*intl*Belarusian - Belarusian (intl.) C*variant*by*legacy*Belarusian - Belarusian (legacy) C*variant*by*ru*Belarusian - Russian (Belarus) C*layout*be*Belgian C*variant*be**Belgian C*variant*be*iso-alternate*Belgian - Belgian (ISO, alt.) C*variant*be*oss_latin9*Belgian - Belgian (Latin-9 only, alt.) C*variant*be*wang*Belgian - Belgian (Wang 724 AZERTY) C*variant*be*oss*Belgian - Belgian (alt.) C*variant*be*nodeadkeys*Belgian - Belgian (no dead keys) C*layout*dz*Berber (Algeria, Latin) C*variant*dz**Berber (Algeria, Latin) C*variant*dz*ar*Berber (Algeria, Latin) - Arabic (Algeria) C*variant*dz*ber*Berber (Algeria, Latin) - Berber (Algeria, Tifinagh) C*variant*dz*azerty-deadkeys*Berber (Algeria, Latin) - Kabyle (AZERTY, with dead keys) C*variant*dz*qwerty-gb-deadkeys*Berber (Algeria, Latin) - Kabyle (QWERTY, UK, with dead keys) C*variant*dz*qwerty-us-deadkeys*Berber (Algeria, Latin) - Kabyle (QWERTY, US, with dead keys) C*layout*ba*Bosnian C*variant*ba**Bosnian C*variant*ba*us*Bosnian - Bosnian (US) C*variant*ba*unicodeus*Bosnian - Bosnian (US, with Bosnian digraphs) C*variant*ba*unicode*Bosnian - Bosnian (with Bosnian digraphs) C*variant*ba*alternatequotes*Bosnian - Bosnian (with guillemets) C*layout*brai*Braille C*variant*brai**Braille C*variant*brai*left_hand_invert*Braille - Braille (left-handed inverted thumb) C*variant*brai*left_hand*Braille - Braille (left-handed) C*variant*brai*right_hand_invert*Braille - Braille (right-handed inverted thumb) C*variant*brai*right_hand*Braille - Braille (right-handed) C*layout*bg*Bulgarian C*variant*bg**Bulgarian C*variant*bg*bekl*Bulgarian - Bulgarian (enhanced) C*variant*bg*bas_phonetic*Bulgarian - Bulgarian (new phonetic) C*variant*bg*phonetic*Bulgarian - Bulgarian (traditional phonetic) C*layout*mm*Burmese C*variant*mm**Burmese C*variant*mm*zawgyi*Burmese - Burmese Zawgyi C*layout*cn*Chinese C*variant*cn**Chinese C*variant*cn*altgr-pinyin*Chinese - Hanyu Pinyin (with AltGr dead keys) C*variant*cn*mon_trad*Chinese - Mongolian (Bichig) C*variant*cn*mon_trad_galik*Chinese - Mongolian (Galik) C*variant*cn*mon_manchu_galik*Chinese - Mongolian (Manchu Galik) C*variant*cn*mon_trad_manchu*Chinese - Mongolian (Manchu) C*variant*cn*mon_todo_galik*Chinese - Mongolian (Todo Galik) C*variant*cn*mon_trad_todo*Chinese - Mongolian (Todo) C*variant*cn*mon_trad_xibe*Chinese - Mongolian (Xibe) C*variant*cn*tib*Chinese - Tibetan C*variant*cn*tib_asciinum*Chinese - Tibetan (with ASCII numerals) C*variant*cn*ug*Chinese - Uyghur C*layout*hr*Croatian C*variant*hr**Croatian C*variant*hr*us*Croatian - Croatian (US) C*variant*hr*unicodeus*Croatian - Croatian (US, with Croatian digraphs) C*variant*hr*unicode*Croatian - Croatian (with Croatian digraphs) C*variant*hr*alternatequotes*Croatian - Croatian (with guillemets) C*layout*cz*Czech C*variant*cz**Czech C*variant*cz*qwerty*Czech - Czech (QWERTY) C*variant*cz*qwerty-mac*Czech - Czech (QWERTY, Macintosh) C*variant*cz*qwerty_bksl*Czech - Czech (QWERTY, extended backslash) C*variant*cz*ucw*Czech - Czech (UCW, only accented letters) C*variant*cz*dvorak-ucw*Czech - Czech (US, Dvorak, UCW support) C*variant*cz*bksl*Czech - Czech (with <\|> key) C*variant*cz*rus*Czech - Russian (Czech, phonetic) C*layout*dk*Danish C*variant*dk**Danish C*variant*dk*dvorak*Danish - Danish (Dvorak) C*variant*dk*mac*Danish - Danish (Macintosh) C*variant*dk*mac_nodeadkeys*Danish - Danish (Macintosh, no dead keys) C*variant*dk*winkeys*Danish - Danish (Windows) C*variant*dk*nodeadkeys*Danish - Danish (no dead keys) C*layout*mv*Dhivehi C*variant*mv**Dhivehi C*layout*nl*Dutch C*variant*nl**Dutch C*variant*nl*mac*Dutch - Dutch (Macintosh) C*variant*nl*us*Dutch - Dutch (US) C*variant*nl*std*Dutch - Dutch (standard) C*layout*bt*Dzongkha C*variant*bt**Dzongkha C*layout*au*English (Australian) C*variant*au**English (Australian) C*layout*cm*English (Cameroon) C*variant*cm**English (Cameroon) C*variant*cm*azerty*English (Cameroon) - Cameroon (AZERTY, intl.) C*variant*cm*dvorak*English (Cameroon) - Cameroon (Dvorak, intl.) C*variant*cm*qwerty*English (Cameroon) - Cameroon Multilingual (QWERTY, intl.) C*variant*cm*french*English (Cameroon) - French (Cameroon) C*variant*cm*mmuock*English (Cameroon) - Mmuock C*layout*gh*English (Ghana) C*variant*gh**English (Ghana) C*variant*gh*akan*English (Ghana) - Akan C*variant*gh*avn*English (Ghana) - Avatime C*variant*gh*gillbt*English (Ghana) - English (Ghana, GILLBT) C*variant*gh*generic*English (Ghana) - English (Ghana, multilingual) C*variant*gh*ewe*English (Ghana) - Ewe C*variant*gh*fula*English (Ghana) - Fula C*variant*gh*ga*English (Ghana) - Ga C*variant*gh*hausa*English (Ghana) - Hausa (Ghana) C*layout*ng*English (Nigeria) C*variant*ng**English (Nigeria) C*variant*ng*hausa*English (Nigeria) - Hausa (Nigeria) C*variant*ng*igbo*English (Nigeria) - Igbo C*variant*ng*yoruba*English (Nigeria) - Yoruba C*layout*za*English (South Africa) C*variant*za**English (South Africa) C*layout*gb*English (UK) C*variant*gb**English (UK) C*variant*gb*colemak*English (UK) - English (UK, Colemak) C*variant*gb*colemak_dh*English (UK) - English (UK, Colemak-DH) C*variant*gb*dvorak*English (UK) - English (UK, Dvorak) C*variant*gb*dvorakukp*English (UK) - English (UK, Dvorak, with UK punctuation) C*variant*gb*mac*English (UK) - English (UK, Macintosh) C*variant*gb*mac_intl*English (UK) - English (UK, Macintosh, intl.) C*variant*gb*extd*English (UK) - English (UK, extended, Windows) C*variant*gb*intl*English (UK) - English (UK, intl., with dead keys) C*variant*gb*pl*English (UK) - Polish (British keyboard) C*layout*us*English (US) C*variant*us**English (US) C*variant*us*chr*English (US) - Cherokee C*variant*us*colemak*English (US) - English (Colemak) C*variant*us*colemak_dh_iso*English (US) - English (Colemak-DH ISO) C*variant*us*colemak_dh*English (US) - English (Colemak-DH) C*variant*us*dvorak*English (US) - English (Dvorak) C*variant*us*dvorak-alt-intl*English (US) - English (Dvorak, alt. intl.) C*variant*us*dvorak-intl*English (US) - English (Dvorak, intl., with dead keys) C*variant*us*dvorak-l*English (US) - English (Dvorak, left-handed) C*variant*us*dvorak-r*English (US) - English (Dvorak, right-handed) C*variant*us*mac*English (US) - English (Macintosh) C*variant*us*norman*English (US) - English (Norman) C*variant*us*symbolic*English (US) - English (US, Symbolic) C*variant*us*alt-intl*English (US) - English (US, alt. intl.) C*variant*us*euro*English (US) - English (US, euro on 5) C*variant*us*intl*English (US) - English (US, intl., with dead keys) C*variant*us*workman*English (US) - English (Workman) C*variant*us*workman-intl*English (US) - English (Workman, intl., with dead keys) C*variant*us*dvorak-classic*English (US) - English (classic Dvorak) C*variant*us*altgr-intl*English (US) - English (intl., with AltGr dead keys) C*variant*us*dvp*English (US) - English (programmer Dvorak) C*variant*us*olpc2*English (US) - English (the divide/multiply toggle the layout) C*variant*us*haw*English (US) - Hawaiian C*variant*us*rus*English (US) - Russian (US, phonetic) C*variant*us*hbs*English (US) - Serbo-Croatian (US) C*layout*epo*Esperanto C*variant*epo**Esperanto C*variant*epo*legacy*Esperanto - Esperanto (legacy) C*layout*ee*Estonian C*variant*ee**Estonian C*variant*ee*dvorak*Estonian - Estonian (Dvorak) C*variant*ee*us*Estonian - Estonian (US) C*variant*ee*nodeadkeys*Estonian - Estonian (no dead keys) C*layout*fo*Faroese C*variant*fo**Faroese C*variant*fo*nodeadkeys*Faroese - Faroese (no dead keys) C*layout*ph*Filipino C*variant*ph**Filipino C*variant*ph*capewell-dvorak-bay*Filipino - Filipino (Capewell-Dvorak, Baybayin) C*variant*ph*capewell-dvorak*Filipino - Filipino (Capewell-Dvorak, Latin) C*variant*ph*capewell-qwerf2k6-bay*Filipino - Filipino (Capewell-QWERF 2006, Baybayin) C*variant*ph*capewell-qwerf2k6*Filipino - Filipino (Capewell-QWERF 2006, Latin) C*variant*ph*colemak-bay*Filipino - Filipino (Colemak, Baybayin) C*variant*ph*colemak*Filipino - Filipino (Colemak, Latin) C*variant*ph*dvorak-bay*Filipino - Filipino (Dvorak, Baybayin) C*variant*ph*dvorak*Filipino - Filipino (Dvorak, Latin) C*variant*ph*qwerty-bay*Filipino - Filipino (QWERTY, Baybayin) C*layout*fi*Finnish C*variant*fi**Finnish C*variant*fi*mac*Finnish - Finnish (Macintosh) C*variant*fi*winkeys*Finnish - Finnish (Windows) C*variant*fi*classic*Finnish - Finnish (classic) C*variant*fi*nodeadkeys*Finnish - Finnish (classic, no dead keys) C*variant*fi*smi*Finnish - Northern Saami (Finland) C*layout*fr*French C*variant*fr**French C*variant*fr*azerty*French - French (AZERTY) C*variant*fr*afnor*French - French (AZERTY, AFNOR) C*variant*fr*bepo*French - French (BEPO) C*variant*fr*bepo_afnor*French - French (BEPO, AFNOR) C*variant*fr*bepo_latin9*French - French (BEPO, Latin-9 only) C*variant*fr*bre*French - French (Breton) C*variant*fr*dvorak*French - French (Dvorak) C*variant*fr*mac*French - French (Macintosh) C*variant*fr*us*French - French (US) C*variant*fr*oss*French - French (alt.) C*variant*fr*oss_latin9*French - French (alt., Latin-9 only) C*variant*fr*oss_nodeadkeys*French - French (alt., no dead keys) C*variant*fr*latin9*French - French (legacy, alt.) C*variant*fr*latin9_nodeadkeys*French - French (legacy, alt., no dead keys) C*variant*fr*nodeadkeys*French - French (no dead keys) C*variant*fr*geo*French - Georgian (France, AZERTY Tskapo) C*variant*fr*oci*French - Occitan C*layout*ca*French (Canada) C*variant*ca**French (Canada) C*variant*ca*multix*French (Canada) - Canadian (intl.) C*variant*ca*multi*French (Canada) - Canadian (intl., 1st part) C*variant*ca*multi-2gr*French (Canada) - Canadian (intl., 2nd part) C*variant*ca*eng*French (Canada) - English (Canada) C*variant*ca*fr-dvorak*French (Canada) - French (Canada, Dvorak) C*variant*ca*fr-legacy*French (Canada) - French (Canada, legacy) C*variant*ca*ike*French (Canada) - Inuktitut C*layout*cd*French (Democratic Republic of the Congo) C*variant*cd**French (Democratic Republic of the Congo) C*layout*tg*French (Togo) C*variant*tg**French (Togo) C*layout*ge*Georgian C*variant*ge**Georgian C*variant*ge*mess*Georgian - Georgian (MESS) C*variant*ge*ergonomic*Georgian - Georgian (ergonomic) C*variant*ge*os*Georgian - Ossetian (Georgia) C*variant*ge*ru*Georgian - Russian (Georgia) C*layout*de*German C*variant*de**German C*variant*de*dvorak*German - German (Dvorak) C*variant*de*e1*German - German (E1) C*variant*de*e2*German - German (E2) C*variant*de*mac*German - German (Macintosh) C*variant*de*mac_nodeadkeys*German - German (Macintosh, no dead keys) C*variant*de*neo*German - German (Neo 2) C*variant*de*qwerty*German - German (QWERTY) C*variant*de*T3*German - German (T3) C*variant*de*us*German - German (US) C*variant*de*deadacute*German - German (dead acute) C*variant*de*deadgraveacute*German - German (dead grave acute) C*variant*de*deadtilde*German - German (dead tilde) C*variant*de*nodeadkeys*German - German (no dead keys) C*variant*de*dsb*German - Lower Sorbian C*variant*de*dsb_qwertz*German - Lower Sorbian (QWERTZ) C*variant*de*ro*German - Romanian (Germany) C*variant*de*ro_nodeadkeys*German - Romanian (Germany, no dead keys) C*variant*de*ru*German - Russian (Germany, phonetic) C*variant*de*tr*German - Turkish (Germany) C*layout*at*German (Austria) C*variant*at**German (Austria) C*variant*at*mac*German (Austria) - German (Austria, Macintosh) C*variant*at*nodeadkeys*German (Austria) - German (Austria, no dead keys) C*layout*gr*Greek C*variant*gr**Greek C*variant*gr*extended*Greek - Greek (extended) C*variant*gr*nodeadkeys*Greek - Greek (no dead keys) C*variant*gr*polytonic*Greek - Greek (polytonic) C*variant*gr*simple*Greek - Greek (simple) C*layout*il*Hebrew C*variant*il**Hebrew C*variant*il*biblical*Hebrew - Hebrew (Biblical, Tiro) C*variant*il*lyx*Hebrew - Hebrew (lyx) C*variant*il*phonetic*Hebrew - Hebrew (phonetic) C*layout*hu*Hungarian C*variant*hu**Hungarian C*variant*hu*qwerty*Hungarian - Hungarian (QWERTY) C*variant*hu*101_qwerty_comma_dead*Hungarian - Hungarian (QWERTY, 101-key, comma, dead keys) C*variant*hu*101_qwerty_comma_nodead*Hungarian - Hungarian (QWERTY, 101-key, comma, no dead keys) C*variant*hu*101_qwerty_dot_dead*Hungarian - Hungarian (QWERTY, 101-key, dot, dead keys) C*variant*hu*101_qwerty_dot_nodead*Hungarian - Hungarian (QWERTY, 101-key, dot, no dead keys) C*variant*hu*102_qwerty_comma_dead*Hungarian - Hungarian (QWERTY, 102-key, comma, dead keys) C*variant*hu*102_qwerty_comma_nodead*Hungarian - Hungarian (QWERTY, 102-key, comma, no dead keys) C*variant*hu*102_qwerty_dot_dead*Hungarian - Hungarian (QWERTY, 102-key, dot, dead keys) C*variant*hu*102_qwerty_dot_nodead*Hungarian - Hungarian (QWERTY, 102-key, dot, no dead keys) C*variant*hu*101_qwertz_comma_dead*Hungarian - Hungarian (QWERTZ, 101-key, comma, dead keys) C*variant*hu*101_qwertz_comma_nodead*Hungarian - Hungarian (QWERTZ, 101-key, comma, no dead keys) C*variant*hu*101_qwertz_dot_dead*Hungarian - Hungarian (QWERTZ, 101-key, dot, dead keys) C*variant*hu*101_qwertz_dot_nodead*Hungarian - Hungarian (QWERTZ, 101-key, dot, no dead keys) C*variant*hu*102_qwertz_comma_dead*Hungarian - Hungarian (QWERTZ, 102-key, comma, dead keys) C*variant*hu*102_qwertz_comma_nodead*Hungarian - Hungarian (QWERTZ, 102-key, comma, no dead keys) C*variant*hu*102_qwertz_dot_dead*Hungarian - Hungarian (QWERTZ, 102-key, dot, dead keys) C*variant*hu*102_qwertz_dot_nodead*Hungarian - Hungarian (QWERTZ, 102-key, dot, no dead keys) C*variant*hu*nodeadkeys*Hungarian - Hungarian (no dead keys) C*variant*hu*standard*Hungarian - Hungarian (standard) C*layout*is*Icelandic C*variant*is**Icelandic C*variant*is*dvorak*Icelandic - Icelandic (Dvorak) C*variant*is*mac*Icelandic - Icelandic (Macintosh) C*variant*is*mac_legacy*Icelandic - Icelandic (Macintosh, legacy) C*layout*in*Indian C*variant*in**Indian C*variant*in*ben*Indian - Bangla (India) C*variant*in*ben_inscript*Indian - Bangla (India, Baishakhi InScript) C*variant*in*ben_baishakhi*Indian - Bangla (India, Baishakhi) C*variant*in*ben_bornona*Indian - Bangla (India, Bornona) C*variant*in*ben_gitanjali*Indian - Bangla (India, Gitanjali) C*variant*in*ben_probhat*Indian - Bangla (India, Probhat) C*variant*in*eng*Indian - English (India, with rupee) C*variant*in*guj*Indian - Gujarati C*variant*in*bolnagri*Indian - Hindi (Bolnagri) C*variant*in*hin-kagapa*Indian - Hindi (KaGaPa, phonetic) C*variant*in*hin-wx*Indian - Hindi (Wx) C*variant*in*iipa*Indian - Indic IPA C*variant*in*kan*Indian - Kannada C*variant*in*kan-kagapa*Indian - Kannada (KaGaPa, phonetic) C*variant*in*mal*Indian - Malayalam C*variant*in*mal_lalitha*Indian - Malayalam (Lalitha) C*variant*in*mal_enhanced*Indian - Malayalam (enhanced InScript, with rupee) C*variant*in*eeyek*Indian - Manipuri (Eeyek) C*variant*in*mar-kagapa*Indian - Marathi (KaGaPa, phonetic) C*variant*in*marathi*Indian - Marathi (enhanced InScript) C*variant*in*olck*Indian - Ol Chiki C*variant*in*ori*Indian - Oriya C*variant*in*ori-bolnagri*Indian - Oriya (Bolnagri) C*variant*in*ori-wx*Indian - Oriya (Wx) C*variant*in*jhelum*Indian - Punjabi (Gurmukhi Jhelum) C*variant*in*guru*Indian - Punjabi (Gurmukhi) C*variant*in*san-kagapa*Indian - Sanskrit (KaGaPa, phonetic) C*variant*in*tam*Indian - Tamil (InScript) C*variant*in*tam_tamilnet_with_tam_nums*Indian - Tamil (TamilNet 99 with Tamil numerals) C*variant*in*tam_tamilnet*Indian - Tamil (TamilNet 99) C*variant*in*tam_tamilnet_TAB*Indian - Tamil (TamilNet 99, TAB encoding) C*variant*in*tam_tamilnet_TSCII*Indian - Tamil (TamilNet 99, TSCII encoding) C*variant*in*tel*Indian - Telugu C*variant*in*tel-kagapa*Indian - Telugu (KaGaPa, phonetic) C*variant*in*tel-sarala*Indian - Telugu (Sarala) C*variant*in*urd-winkeys*Indian - Urdu (Windows) C*variant*in*urd-phonetic3*Indian - Urdu (alt. phonetic) C*variant*in*urd-phonetic*Indian - Urdu (phonetic) C*layout*jv*Indonesian (Javanese) C*variant*jv**Indonesian (Javanese) C*layout*id*Indonesian (Latin) C*variant*id**Indonesian (Latin) C*variant*id*phoneticx*Indonesian (Latin) - Indonesian (Arab Pegon, extended phonetic) C*layout*iq*Iraqi C*variant*iq**Iraqi C*variant*iq*ku_ara*Iraqi - Kurdish (Iraq, Arabic-Latin) C*variant*iq*ku_f*Iraqi - Kurdish (Iraq, F) C*variant*iq*ku_alt*Iraqi - Kurdish (Iraq, Latin Alt-Q) C*variant*iq*ku*Iraqi - Kurdish (Iraq, Latin Q) C*layout*ie*Irish C*variant*ie**Irish C*variant*ie*CloGaelach*Irish - CloGaelach C*variant*ie*UnicodeExpert*Irish - Irish (UnicodeExpert) C*variant*ie*ogam*Irish - Ogham C*variant*ie*ogam_is434*Irish - Ogham (IS434) C*layout*it*Italian C*variant*it**Italian C*variant*it*fur*Italian - Friulian (Italy) C*variant*it*geo*Italian - Georgian (Italy) C*variant*it*ibm*Italian - Italian (IBM 142) C*variant*it*mac*Italian - Italian (Macintosh) C*variant*it*us*Italian - Italian (US) C*variant*it*winkeys*Italian - Italian (Windows) C*variant*it*intl*Italian - Italian (intl., with dead keys) C*variant*it*nodeadkeys*Italian - Italian (no dead keys) C*variant*it*scn*Italian - Sicilian C*layout*jp*Japanese C*variant*jp**Japanese C*variant*jp*dvorak*Japanese - Japanese (Dvorak) C*variant*jp*kana86*Japanese - Japanese (Kana 86) C*variant*jp*kana*Japanese - Japanese (Kana) C*variant*jp*mac*Japanese - Japanese (Macintosh) C*variant*jp*OADG109A*Japanese - Japanese (OADG 109A) C*layout*nec_vndr/jp*Japanese (PC-98) C*variant*nec_vndr/jp**Japanese (PC-98) C*layout*kz*Kazakh C*variant*kz**Kazakh C*variant*kz*latin*Kazakh - Kazakh (Latin) C*variant*kz*ext*Kazakh - Kazakh (extended) C*variant*kz*kazrus*Kazakh - Kazakh (with Russian) C*variant*kz*ruskaz*Kazakh - Russian (Kazakhstan, with Kazakh) C*layout*kh*Khmer (Cambodia) C*variant*kh**Khmer (Cambodia) C*layout*kr*Korean C*variant*kr**Korean C*variant*kr*kr104*Korean - Korean (101/104-key compatible) C*layout*kg*Kyrgyz C*variant*kg**Kyrgyz C*variant*kg*phonetic*Kyrgyz - Kyrgyz (phonetic) C*layout*la*Lao C*variant*la**Lao C*variant*la*stea*Lao - Lao (STEA) C*layout*lv*Latvian C*variant*lv**Latvian C*variant*lv*fkey*Latvian - Latvian (F) C*variant*lv*adapted*Latvian - Latvian (adapted) C*variant*lv*apostrophe*Latvian - Latvian (apostrophe) C*variant*lv*ergonomic*Latvian - Latvian (ergonomic, ŪGJRMV) C*variant*lv*modern*Latvian - Latvian (modern) C*variant*lv*tilde*Latvian - Latvian (tilde) C*layout*lt*Lithuanian C*variant*lt**Lithuanian C*variant*lt*ibm*Lithuanian - Lithuanian (IBM LST 1205-92) C*variant*lt*lekp*Lithuanian - Lithuanian (LEKP) C*variant*lt*lekpa*Lithuanian - Lithuanian (LEKPa) C*variant*lt*ratise*Lithuanian - Lithuanian (Ratise) C*variant*lt*us*Lithuanian - Lithuanian (US) C*variant*lt*std*Lithuanian - Lithuanian (standard) C*variant*lt*sgs*Lithuanian - Samogitian C*layout*mk*Macedonian C*variant*mk**Macedonian C*variant*mk*nodeadkeys*Macedonian - Macedonian (no dead keys) C*layout*my*Malay (Jawi, Arabic Keyboard) C*variant*my**Malay (Jawi, Arabic Keyboard) C*variant*my*phonetic*Malay (Jawi, Arabic Keyboard) - Malay (Jawi, phonetic) C*layout*mt*Maltese C*variant*mt**Maltese C*variant*mt*alt-gb*Maltese - Maltese (UK, with AltGr overrides) C*variant*mt*us*Maltese - Maltese (US) C*variant*mt*alt-us*Maltese - Maltese (US, with AltGr overrides) C*layout*mao*Maori C*variant*mao**Maori C*layout*md*Moldavian C*variant*md**Moldavian C*variant*md*gag*Moldavian - Moldavian (Gagauz) C*layout*mn*Mongolian C*variant*mn**Mongolian C*layout*me*Montenegrin C*variant*me**Montenegrin C*variant*me*cyrillic*Montenegrin - Montenegrin (Cyrillic) C*variant*me*cyrillicyz*Montenegrin - Montenegrin (Cyrillic, ZE and ZHE swapped) C*variant*me*cyrillicalternatequotes*Montenegrin - Montenegrin (Cyrillic, with guillemets) C*variant*me*latinyz*Montenegrin - Montenegrin (Latin, QWERTY) C*variant*me*latinunicode*Montenegrin - Montenegrin (Latin, Unicode) C*variant*me*latinunicodeyz*Montenegrin - Montenegrin (Latin, Unicode, QWERTY) C*variant*me*latinalternatequotes*Montenegrin - Montenegrin (Latin, with guillemets) C*layout*gn*NKo (AZERTY) C*variant*gn**NKo (AZERTY) C*layout*np*Nepali C*variant*np**Nepali C*layout*no*Norwegian C*variant*no**Norwegian C*variant*no*smi*Norwegian - Northern Saami (Norway) C*variant*no*smi_nodeadkeys*Norwegian - Northern Saami (Norway, no dead keys) C*variant*no*colemak*Norwegian - Norwegian (Colemak) C*variant*no*dvorak*Norwegian - Norwegian (Dvorak) C*variant*no*mac*Norwegian - Norwegian (Macintosh) C*variant*no*mac_nodeadkeys*Norwegian - Norwegian (Macintosh, no dead keys) C*variant*no*winkeys*Norwegian - Norwegian (Windows) C*variant*no*nodeadkeys*Norwegian - Norwegian (no dead keys) C*layout*ir*Persian C*variant*ir**Persian C*variant*ir*ku_ara*Persian - Kurdish (Iran, Arabic-Latin) C*variant*ir*ku_f*Persian - Kurdish (Iran, F) C*variant*ir*ku_alt*Persian - Kurdish (Iran, Latin Alt-Q) C*variant*ir*ku*Persian - Kurdish (Iran, Latin Q) C*variant*ir*pes_keypad*Persian - Persian (with Persian keypad) C*layout*pl*Polish C*variant*pl**Polish C*variant*pl*csb*Polish - Kashubian C*variant*pl*dvorak*Polish - Polish (Dvorak) C*variant*pl*dvorak_altquotes*Polish - Polish (Dvorak, with Polish quotes on key 1) C*variant*pl*dvorak_quotes*Polish - Polish (Dvorak, with Polish quotes on quotemark key) C*variant*pl*qwertz*Polish - Polish (QWERTZ) C*variant*pl*legacy*Polish - Polish (legacy) C*variant*pl*dvp*Polish - Polish (programmer Dvorak) C*variant*pl*ru_phonetic_dvorak*Polish - Russian (Poland, phonetic Dvorak) C*variant*pl*szl*Polish - Silesian C*layout*pt*Portuguese C*variant*pt**Portuguese C*variant*pt*nativo-epo*Portuguese - Esperanto (Portugal, Nativo) C*variant*pt*mac*Portuguese - Portuguese (Macintosh) C*variant*pt*mac_nodeadkeys*Portuguese - Portuguese (Macintosh, no dead keys) C*variant*pt*nativo-us*Portuguese - Portuguese (Nativo for US keyboards) C*variant*pt*nativo*Portuguese - Portuguese (Nativo) C*variant*pt*nodeadkeys*Portuguese - Portuguese (no dead keys) C*layout*br*Portuguese (Brazil) C*variant*br**Portuguese (Brazil) C*variant*br*nativo-epo*Portuguese (Brazil) - Esperanto (Brazil, Nativo) C*variant*br*dvorak*Portuguese (Brazil) - Portuguese (Brazil, Dvorak) C*variant*br*thinkpad*Portuguese (Brazil) - Portuguese (Brazil, IBM/Lenovo ThinkPad) C*variant*br*nativo-us*Portuguese (Brazil) - Portuguese (Brazil, Nativo for US keyboards) C*variant*br*nativo*Portuguese (Brazil) - Portuguese (Brazil, Nativo) C*variant*br*nodeadkeys*Portuguese (Brazil) - Portuguese (Brazil, no dead keys) C*layout*ro*Romanian C*variant*ro**Romanian C*variant*ro*winkeys*Romanian - Romanian (Windows) C*variant*ro*std*Romanian - Romanian (standard) C*layout*ru*Russian C*variant*ru**Russian C*variant*ru*bak*Russian - Bashkirian C*variant*ru*cv*Russian - Chuvash C*variant*ru*cv_latin*Russian - Chuvash (Latin) C*variant*ru*xal*Russian - Kalmyk C*variant*ru*kom*Russian - Komi C*variant*ru*chm*Russian - Mari C*variant*ru*os_winkeys*Russian - Ossetian (Windows) C*variant*ru*os_legacy*Russian - Ossetian (legacy) C*variant*ru*dos*Russian - Russian (DOS) C*variant*ru*mac*Russian - Russian (Macintosh) C*variant*ru*legacy*Russian - Russian (legacy) C*variant*ru*phonetic*Russian - Russian (phonetic) C*variant*ru*phonetic_azerty*Russian - Russian (phonetic, AZERTY) C*variant*ru*phonetic_dvorak*Russian - Russian (phonetic, Dvorak) C*variant*ru*phonetic_fr*Russian - Russian (phonetic, French) C*variant*ru*phonetic_winkeys*Russian - Russian (phonetic, Windows) C*variant*ru*phonetic_YAZHERTY*Russian - Russian (phonetic, YAZHERTY) C*variant*ru*typewriter*Russian - Russian (typewriter) C*variant*ru*typewriter-legacy*Russian - Russian (typewriter, legacy) C*variant*ru*srp*Russian - Serbian (Russia) C*variant*ru*tt*Russian - Tatar C*variant*ru*udm*Russian - Udmurt C*variant*ru*sah*Russian - Yakut C*layout*rs*Serbian C*variant*rs**Serbian C*variant*rs*rue*Serbian - Pannonian Rusyn C*variant*rs*yz*Serbian - Serbian (Cyrillic, ZE and ZHE swapped) C*variant*rs*alternatequotes*Serbian - Serbian (Cyrillic, with guillemets) C*variant*rs*latin*Serbian - Serbian (Latin) C*variant*rs*latinyz*Serbian - Serbian (Latin, QWERTY) C*variant*rs*latinunicode*Serbian - Serbian (Latin, Unicode) C*variant*rs*latinunicodeyz*Serbian - Serbian (Latin, Unicode, QWERTY) C*variant*rs*latinalternatequotes*Serbian - Serbian (Latin, with guillemets) C*layout*lk*Sinhala (phonetic) C*variant*lk**Sinhala (phonetic) C*variant*lk*us*Sinhala (phonetic) - Sinhala (US) C*variant*lk*tam_unicode*Sinhala (phonetic) - Tamil (Sri Lanka, TamilNet 99) C*variant*lk*tam_TAB*Sinhala (phonetic) - Tamil (Sri Lanka, TamilNet 99, TAB encoding) C*layout*sk*Slovak C*variant*sk**Slovak C*variant*sk*qwerty*Slovak - Slovak (QWERTY) C*variant*sk*qwerty_bksl*Slovak - Slovak (QWERTY, extended backslash) C*variant*sk*bksl*Slovak - Slovak (extended backslash) C*layout*si*Slovenian C*variant*si**Slovenian C*variant*si*us*Slovenian - Slovenian (US) C*variant*si*alternatequotes*Slovenian - Slovenian (with guillemets) C*layout*es*Spanish C*variant*es**Spanish C*variant*es*ast*Spanish - Asturian (Spain, with bottom-dot H and L) C*variant*es*cat*Spanish - Catalan (Spain, with middle-dot L) C*variant*es*dvorak*Spanish - Spanish (Dvorak) C*variant*es*mac*Spanish - Spanish (Macintosh) C*variant*es*winkeys*Spanish - Spanish (Windows) C*variant*es*deadtilde*Spanish - Spanish (dead tilde) C*variant*es*nodeadkeys*Spanish - Spanish (no dead keys) C*layout*latam*Spanish (Latin American) C*variant*latam**Spanish (Latin American) C*variant*latam*colemak-gaming*Spanish (Latin American) - Spanish (Latin American, Colemak for gaming) C*variant*latam*colemak*Spanish (Latin American) - Spanish (Latin American, Colemak) C*variant*latam*dvorak*Spanish (Latin American) - Spanish (Latin American, Dvorak) C*variant*latam*deadtilde*Spanish (Latin American) - Spanish (Latin American, dead tilde) C*variant*latam*nodeadkeys*Spanish (Latin American) - Spanish (Latin American, no dead keys) C*layout*ke*Swahili (Kenya) C*variant*ke**Swahili (Kenya) C*variant*ke*kik*Swahili (Kenya) - Kikuyu C*layout*tz*Swahili (Tanzania) C*variant*tz**Swahili (Tanzania) C*layout*se*Swedish C*variant*se**Swedish C*variant*se*smi*Swedish - Northern Saami (Sweden) C*variant*se*rus*Swedish - Russian (Sweden, phonetic) C*variant*se*rus_nodeadkeys*Swedish - Russian (Sweden, phonetic, no dead keys) C*variant*se*dvorak*Swedish - Swedish (Dvorak) C*variant*se*us_dvorak*Swedish - Swedish (Dvorak, intl.) C*variant*se*mac*Swedish - Swedish (Macintosh) C*variant*se*svdvorak*Swedish - Swedish (Svdvorak) C*variant*se*us*Swedish - Swedish (US) C*variant*se*nodeadkeys*Swedish - Swedish (no dead keys) C*variant*se*swl*Swedish - Swedish Sign Language C*layout*ch*Switzerland C*variant*ch**Switzerland C*variant*ch*fr*Switzerland - French (Switzerland) C*variant*ch*fr_mac*Switzerland - French (Switzerland, Macintosh) C*variant*ch*fr_nodeadkeys*Switzerland - French (Switzerland, no dead keys) C*variant*ch*de_mac*Switzerland - German (Switzerland, Macintosh) C*variant*ch*legacy*Switzerland - German (Switzerland, legacy) C*variant*ch*de_nodeadkeys*Switzerland - German (Switzerland, no dead keys) C*layout*tw*Taiwanese C*variant*tw**Taiwanese C*variant*tw*saisiyat*Taiwanese - Saisiyat (Taiwan) C*variant*tw*indigenous*Taiwanese - Taiwanese (indigenous) C*layout*tj*Tajik C*variant*tj**Tajik C*variant*tj*legacy*Tajik - Tajik (legacy) C*layout*th*Thai C*variant*th**Thai C*variant*th*pat*Thai - Thai (Pattachote) C*variant*th*tis*Thai - Thai (TIS-820.2538) C*layout*bw*Tswana C*variant*bw**Tswana C*layout*tr*Turkish C*variant*tr**Turkish C*variant*tr*crh_alt*Turkish - Crimean Tatar (Turkish Alt-Q) C*variant*tr*crh_f*Turkish - Crimean Tatar (Turkish F) C*variant*tr*crh*Turkish - Crimean Tatar (Turkish Q) C*variant*tr*ku_f*Turkish - Kurdish (Turkey, F) C*variant*tr*ku_alt*Turkish - Kurdish (Turkey, Latin Alt-Q) C*variant*tr*ku*Turkish - Kurdish (Turkey, Latin Q) C*variant*tr*otk*Turkish - Old Turkic C*variant*tr*ot*Turkish - Ottoman C*variant*tr*otf*Turkish - Ottoman (F) C*variant*tr*alt*Turkish - Turkish (Alt-Q) C*variant*tr*f*Turkish - Turkish (F) C*variant*tr*intl*Turkish - Turkish (intl., with dead keys) C*layout*tm*Turkmen C*variant*tm**Turkmen C*variant*tm*alt*Turkmen - Turkmen (Alt-Q) C*layout*ua*Ukrainian C*variant*ua**Ukrainian C*variant*ua*rstu_ru*Ukrainian - Russian (Ukraine, standard RSTU) C*variant*ua*winkeys*Ukrainian - Ukrainian (Windows) C*variant*ua*homophonic*Ukrainian - Ukrainian (homophonic) C*variant*ua*legacy*Ukrainian - Ukrainian (legacy) C*variant*ua*phonetic*Ukrainian - Ukrainian (phonetic) C*variant*ua*rstu*Ukrainian - Ukrainian (standard RSTU) C*variant*ua*typewriter*Ukrainian - Ukrainian (typewriter) C*layout*pk*Urdu (Pakistan) C*variant*pk**Urdu (Pakistan) C*variant*pk*ara*Urdu (Pakistan) - Arabic (Pakistan) C*variant*pk*snd*Urdu (Pakistan) - Sindhi C*variant*pk*urd-crulp*Urdu (Pakistan) - Urdu (Pakistan, CRULP) C*variant*pk*urd-nla*Urdu (Pakistan) - Urdu (Pakistan, NLA) C*layout*uz*Uzbek C*variant*uz**Uzbek C*variant*uz*latin*Uzbek - Uzbek (Latin) C*layout*vn*Vietnamese C*variant*vn**Vietnamese C*variant*vn*fr*Vietnamese - Vietnamese (French) C*variant*vn*us*Vietnamese - Vietnamese (US) C*layout*sn*Wolof C*variant*sn**Wolof EOF } # all_kbdnames () { # cat <<'EOF' # C*model*logidinovo*Logitech diNovo Keyboard # C*model*amiga*Amiga # ... # zh_TW*layout*al*阿爾巴尼亞 # zh_TW*variant*al**阿爾巴尼亞 # EOF # } keyboard_present () { local kern kbdpattern class subclass protocol kern=`uname -r` case "$kern" in 2.0*|2.1*|2.2*|2.3*|2.4*|2.5*) # can't check keyboard presence return 0; ;; esac [ -d /sys/bus/usb/devices ] || return 0 for d in /sys/bus/usb/devices/*:*; do [ -d "$d" ] || continue class=$(cat "$d/bInterfaceClass") # 03 = Human Interface Device subclass=$(cat "$d/bInterfaceSubClass") # 01 = Boot Interface Subclass protocol=$(cat "$d/bInterfaceProtocol") # 01 = Keyboard case "$class:$subclass:$protocol" in 03:01:01) return 0 ;; esac done # For Bluetooth keyboards one has to check the class of the device # -- it has to be 0x000540 or 0x002540. I don't how to make the # required test, so instead we test (unreliably) for a string # bluetooth.*keyboard in /proc/bus/input/devices. [ -f /proc/bus/input/devices ] || return 0 kbdpattern="AT Set \|AT Translated Set\|AT Raw Set" kbdpattern="$kbdpattern\|Atari Keyboard" kbdpattern="$kbdpattern\|Amiga Keyboard" kbdpattern="$kbdpattern\|HIL keyboard" kbdpattern="$kbdpattern\|ADB keyboard" kbdpattern="$kbdpattern\|Sun Type" kbdpattern="$kbdpattern\|bluetooth.*keyboard" if grep -i "$kbdpattern" /proc/bus/input/devices >/dev/null; then return 0 fi return 1 } # keyboard_present () { # if there is a keyboard; then # return 0 # else # return 1 # fi # } ###################################################################### # Function ask_debconf. Ask the user to choose amongst the options # listed in $kbdnames. ###################################################################### ask_debconf () { local template priority prefix default_code default_description choices add # The template to ask template="$1" # The priority for the question priority="$2" # The prefix for $kbdnames prefix="$(echo "$3"|regex_pattern_escape)" # The default choice (optional) default_code="$(echo "$4"|regex_pattern_escape)" # Additional string to append to $kbdnames add="$(echo "$5"|regex_escape)" add=" $add" choices1=`echo "$kbdnames" | grep "^$prefix\*" | sed -e "s/^$prefix\*[^\*]*\*//" -e 's/,/\\\\,/g' | sort` choices2=`echo "$add" | grep "^$prefix\*" | sed -e "s/^$prefix\*[^\*]*\*//" -e 's/,/\\\\,/g'` choices=`echo "$choices1 $choices2" | sed -e 's/$/,/'` choices=`echo $choices | sed 's/, *$//' | regex_unescape` choices=`echo $choices | sed 's/,$//'` if echo "$choices" | grep '[^\\\\],' >/dev/null; then db_subst $template CHOICES "$choices" default_description=`echo "$kbdnames$add" | grep "^$prefix\*${default_code}\*" | sed -e "s/^$prefix\*${default_code}\*//" | regex_unescape` if [ -z "$default_description" ]; then # For XkbVariant the empty string is usually a sensible default default_description=`echo "$kbdnames$add" | grep "^$prefix\*\*" | sed -e "s/^$prefix\*\*//" | regex_unescape ` fi if [ -n "$default_description" ]; then db_default $template "$default_description" elif [ -n "$default_code" ]; then # A default was requested, but we couldn't resolve it to a # description, so we'd better ask. priority=critical fi db_input $priority $template || true db_go || return 255 db_get $template else # There is only one choice - no need to use debconf [ $STATE -gt $old_state ] || return 255 RET=$(echo "$choices"|sed 's/ *$//') fi RET=`echo "$RET" | regex_pattern_escape` RET=`echo "$kbdnames$add" | grep "^$prefix\*[^\*]*\*" | sed 's/ */ /g' | grep "\*$RET\$" | sed -e "s/^$prefix\*\([^\*]*\)\*.*/\1/" | regex_unescape` return 0 } ###################################################################### # Function guess_arch - detect the architecture and subarchitecture ###################################################################### # The guess arch code is taken from "console-data.conf" # (translated from Perl to shell) # SUBARCH KEYMAP SET DETECTION # m68k/atari atari "Model: Atari" # m68k/amiga amiga "Model: Amiga" # m68k/mac mac "Model: Macintosh" # m68k/mvme pc "Model: Motorola" # m68k/bvme pc "Model: BVME[46]000" # m68k/{sun,apollo,next,q40,hp300} Not supported by Debian # ppc/apus amiga "machine: Amiga" # ppc/chrp pc,mac "machine: CHRP" # ppc/pmac mac "machine: PowerMac|[Pp]ower[Bb]ook*|Power|iMac*|PowerMac1*" # ppc/prep pc "machine: PReP" # ppc/ps3 pc "platform: PS3" # ppc/cell pc "platform: Cell" # ppc/{bbox,mbx,ppc64,82xx,8xx} Not yet supported by Debian # arm/* pc (refered to as 'arm' only) guess_arch () { local arch subarch line if which archdetect 2>/dev/null >/dev/null; then archdetect return 0 fi arch=`dpkg --print-architecture` if [ "$arch" = 'powerpc' -o "$arch" = 'm68k' ]; then if [ "$arch" = powerpc ]; then line=`sed -n 's/^platform.*: *//p' /proc/cpuinfo` if [ "$line" = PS3 ] || [ "$line" = Cell ]; then subarch=`echo $line|tr A-Z a-z` else line=`sed -n 's/^machine.*: *//p' /proc/cpuinfo` if [ "$line" = '' ]; then echo unknown return 0 fi subarch=`echo $line|tr A-Z a-z` fi elif [ "$arch" = m68k ]; then line=`sed -n 's/^Model.*: *//p' /proc/hardware` if [ "$line" = '' ]; then echo unknown return 0 fi subarch=`echo $line|tr A-Z a-z` fi case "$subarch" in *amiga*) subarch=amiga ;; *chrp*) subarch=chrp ;; *prep*) subarch=prep ;; *macintosh*|*powermac*|*powerbook*|*power*|*imac*|*powermac1*) subarch=mac ;; *atari*) subarch=atari ;; *motorola*) subarch=mvme ;; *bvme*) subarch=bvme ;; *) subarch=`echo $subarch|sed 's/^\s*//'` ;; esac arch="$arch/$subarch" fi echo $arch return 0 } ######################################################################### # Set $locale. Extract the strings for the chosen language in $kbdnames ######################################################################### if which locale 2>/dev/null >/dev/null; then eval `locale` fi if [ "$LC_CTYPE" -a "$LC_CTYPE" != C ]; then locale=$LC_CTYPE elif db_get debian-installer/locale && [ "$RET" ]; then locale="$RET" else locale=C fi langcountry="$locale" if ! type locale >/dev/null 2>&1 || [ "$OVERRIDE_USE_DEBCONF_LOCALE" ]; then if db_get localechooser/languagelist && [ "$RET" ]; then lang="$RET" if db_get debian-installer/country && [ "$RET" ]; then langcountry="${lang}_$RET" fi fi fi if [ "$LC_MESSAGES" -a "$LC_MESSAGES" != C ]; then messages=$LC_MESSAGES elif db_get debian-installer/locale && [ "$RET" ]; then messages="$RET" else messages=C fi messages_lang=$(echo $messages | sed 's/_.*//') messages_country=$(echo $messages | sed 's/.*_//;s/\..*//;s/@.*//') messages_modif= echo $messages | grep -v -q @ || messages_modif=$(echo $messages | sed 's/.*@//') lang_kbdnames () { all_kbdnames | \ regex_escape | \ grep "^$1[*]" | \ sed "s/^$1[*]//" } kbdnames=$(lang_kbdnames ${messages_lang}_${messages_country}__${messages_modif}) [ -n "$kbdnames" ] || kbdnames=$(lang_kbdnames ${messages_lang}_${messages_country}__${messages_modif}) [ -n "$kbdnames" ] || kbdnames=$(lang_kbdnames ${messages_lang}_${messages_country}) [ -n "$kbdnames" ] || kbdnames=$(lang_kbdnames ${messages_lang}) [ -n "$kbdnames" ] || kbdnames=$(lang_kbdnames C) if [ "$is_not_debian_installer" ]; then if \ ! which iconv >/dev/null \ || ! kbdnames="$(echo "$kbdnames" | iconv -f UTF-8 -t $(locale charmap)//TRANSLIT)" then kbdnames=$(lang_kbdnames C) fi fi ###################################################################### # Compute default values for $XKBMODEL, $XKBLAYOUT, $XKBVARIANT # based on the architecture and the locale. ###################################################################### arch=`guess_arch` case "$arch" in alpha*) XKBMODEL=pc105 model_priority=medium ;; amd64*) XKBMODEL=pc105 model_priority=medium ;; arm*) XKBMODEL=pc105 model_priority=medium ;; i386*) XKBMODEL=pc105 model_priority=medium ;; hppa*) XKBMODEL=pc105 model_priority=medium ;; ia64*) XKBMODEL=pc105 model_priority=medium ;; m68k/amiga) XKBMODEL=amiga model_priority=medium ;; m68k/atari) XKBMODEL=ataritt model_priority=medium ;; m68k/mac) XKBMODEL=macintosh model_priority=medium ;; m68k/sun*) XKBMODEL=pc105 # UNKNOWN: sun4, sun5 or pc105 model_priority=critical ;; m68k/*vme*) XKBMODEL=pc105 model_priority=medium ;; mips*) XKBMODEL=pc105 model_priority=medium ;; powerpc/amiga) XKBMODEL=amiga model_priority=medium ;; powerpc/apus) XKBMODEL=amiga model_priority=medium ;; powerpc/chrp*) XKBMODEL=pc105 # UNKNOWN: pc105, macintosh or maybe amiga model_priority=critical ;; powerpc/mac) XKBMODEL=pc105 model_priority=medium ;; powerpc/pasemi) XKBMODEL=pc105 model_priority=medium ;; powerpc/powermac*) XKBMODEL=pc105 model_priority=medium ;; powerpc/prep) XKBMODEL=pc105 model_priority=medium ;; powerpc/ps3|powerpc/cell) XKBMODEL=pc105 model_priority=medium ;; ppc64el/*) XKBMODEL=pc105 model_priority=medium ;; sparc*) XKBMODEL=pc105 # sun4 or sun5 on older kernels model_priority=medium ;; s390*) XKBMODEL=pc105 model_priority=medium ;; *) XKBMODEL=pc105 # UNKNOWN model_priority=critical ;; esac layout_priority=high case "$langcountry" in # Keyboards for countries *_AL*) XKBLAYOUT=al # Albania ;; *_AZ*) XKBLAYOUT=az # Azerbaijan ;; *_BD*) XKBLAYOUT=us,bd # Bangladesh ;; *_BE*) XKBLAYOUT=be # Belgium ;; *_BG*) XKBLAYOUT=us,bg # Bulgaria layout_priority=critical ;; *_BR*) XKBLAYOUT=br # Brazil ;; *_BT*) XKBLAYOUT=us,bt # Bhutan ;; *_BY*) XKBLAYOUT=us,by # Belarus ;; fr_CA*) XKBLAYOUT=ca # Canada ;; *_CA*) XKBLAYOUT=us # U.S. English ;; de_CH*) XKBLAYOUT=ch # Switzerland ;; fr_CH*) XKBLAYOUT=ch # Switzerland XKBVARIANT=fr # French ;; *_CH*) XKBLAYOUT=ch # Switzerland layout_priority=critical ;; *_CZ*) XKBLAYOUT=cz # Czechia layout_priority=critical ;; *_DK*) XKBLAYOUT=dk # Denmark ;; *_EE*) XKBLAYOUT=ee # Estonia ;; ast_ES*) XKBLAYOUT=es # Spain XKBVARIANT=ast # Asturian ;; bo_*) XKBLAYOUT=us,cn # China XKBVARIANT=,tib # Tibetan ;; ca_ES*) XKBLAYOUT=es # Spain XKBVARIANT=cat # Catalan ;; *_ES*) XKBLAYOUT=es # Spain ;; *_ET*) XKBLAYOUT=us,et # Ethiopia ;; se_FI*) XKBLAYOUT=fi # Finland XKBVARIANT=smi # Northern Saami ;; *_FI*) XKBLAYOUT=fi # Finland ;; *_FR*) XKBLAYOUT=fr # French XKBVARIANT=latin9 ;; *_GB*) XKBLAYOUT=gb # United Kingdom ;; *_GG*) XKBLAYOUT=gb # United Kingdom ;; *_HU*) XKBLAYOUT=hu # Hungary ;; *_IE*) XKBLAYOUT=ie # Ireland ;; *_IL*) XKBLAYOUT=us,il # Israel layout_priority=critical ;; *_IM*) XKBLAYOUT=gb # United Kingdom ;; *_IR*) XKBLAYOUT=us,ir # Iran ;; *_IS*) XKBLAYOUT=is # Iceland ;; *_IT*) XKBLAYOUT=it # Italy ;; *_JE*) XKBLAYOUT=gb # United Kingdom ;; *_JP*) XKBLAYOUT=jp # Japan ;; *_LT*) XKBLAYOUT=lt # Lithuania layout_priority=critical ;; *_LV*) XKBLAYOUT=lv # Latvia ;; *_KG*) XKBLAYOUT=us,kg # Kyrgyzstan ;; *_KH*) XKBLAYOUT=us,kh # Cambodia ;; *_KR*) XKBLAYOUT=kr # South Korea XKBVARIANT=kr104 # pc104 compatible mode, safe choice ;; *_KZ*) XKBLAYOUT=us,kz # Kazakhstan ;; *_LK*) XKBLAYOUT=us,lk # Sri Lanka ;; *_MA*) XKBLAYOUT=us,ma # Morocco ;; *_MK*) XKBLAYOUT=us,mk # Macedonia ;; # According to https://launchpad.net/bugs/129982, Dutch users prefer the US # intl keymap. *_NL*) XKBLAYOUT=us # Netherlands XKBVARIANT=intl # International (with dead keys) ;; *_MM*) XKBLAYOUT=us,mm # Myanmar ;; *_MN*) XKBLAYOUT=us,mn # Mongolia ;; *_MT*) XKBLAYOUT=mt # Malta layout_priority=critical ;; se_NO*) XKBLAYOUT=no # Norway XKBVARIANT=smi # Northern Saami ;; *_NO*) XKBLAYOUT=no # Norway (se_NO is not in this case) ;; *_NP*) XKBLAYOUT=us,np # Nepal ;; *_PH*) XKBLAYOUT=ph # Philipines ;; *_PL*) XKBLAYOUT=pl # Poland ;; *_PT*) XKBLAYOUT=pt # Portugal ;; *_RO*) XKBLAYOUT=ro # Romania ;; *_RU*) XKBLAYOUT=us,ru # Russia layout_priority=critical ;; se_SE*) XKBLAYOUT=se # Sweden XKBVARIANT=smi # Northern Saami ;; *_SK*) XKBLAYOUT=sk # Slovakia ;; *_SI*) XKBLAYOUT=si # Slovenia ;; tg_*) XKBLAYOUT=us,tj # Tajik ;; *_TJ*) XKBLAYOUT=us,tj # Tajikistan ;; *_TH*) XKBLAYOUT=us,th # Thailand layout_priority=critical ;; ku_TR*) XKBLAYOUT=tr # Turkish XKBVARIANT=ku # Kurdish, Latin Q ;; *_TR*) XKBLAYOUT=tr # Turkish layout_priority=critical ;; *_UA*) XKBLAYOUT=us,ua # Ukraine ;; en_US*) XKBLAYOUT=us # U.S. English ;; # According to https://launchpad.net/bugs/191451, most keyboards in Vietnam # are in fact US keyboards. *_VN*) XKBLAYOUT=us # Vietnam ;; *_ZA*) XKBLAYOUT=za # South Africa ;; # Keyboards for specific languages and international keyboards: # TODO: Is the following list correct? *_AR*|*_BO*|*_CL*|*_CO*|*_CR*|*_DO*|*_EC*|*_GT*|*_HN*|*_MX*|*_NI*|*_PA*|*_PE*|es_PR*|*_PY*|*_SV*|es_US*|*_UY*|*_VE*) XKBLAYOUT=latam # Latin American ;; ar_*) XKBLAYOUT=us,ara # Arabic ;; bn_*) XKBLAYOUT=us,in # India XKBVARIANT=,ben # Bengali ;; bs_*) XKBLAYOUT=ba # Bosnia and Herzegovina ;; de_LI*) XKBLAYOUT=ch # Liechtenstein ;; de_*) XKBLAYOUT=de # Germany ;; el_*) XKBLAYOUT=us,gr # Greece ;; eo|eo.*|eo_*|eo\@*) XKBLAYOUT=epo # Esperanto layout_priority=critical ;; fr_*) XKBLAYOUT=fr # France XKBVARIANT=oss # Alternative layout_priority=critical ;; gu_*) XKBLAYOUT=us,in # India XKBVARIANT=,guj # Gujarati ;; hi_*) XKBLAYOUT=us,in # India ;; hr_*) XKBLAYOUT=hr # Croatia ;; hy_*) XKBLAYOUT=us,am # Armenia ;; ka_*) XKBLAYOUT=us,ge # Georgia layout_priority=critical ;; kab_*) XKBLAYOUT=dz # Algeria XKBVARIANT=la # Berber (Latin) ;; kn_*) XKBLAYOUT=us,in # India XKBVARIANT=,kan # Kannada ;; ku_*) XKBLAYOUT=tr # Turkish XKBVARIANT=ku # Kurdish layout_priority=critical ;; lo_*) XKBLAYOUT=us,la # Laos ;; mr_*) XKBLAYOUT=us,in # India ;; ml_*) XKBLAYOUT=us,in # India XKBVARIANT=,mal # Malayalam ;; my_*) XKBLAYOUT=us,mm # Burmese ;; ne_*) XKBLAYOUT=us,np # Nepali ;; os_*) XKBLAYOUT=ru # Russia XKBVARIANT=os # Ossetian ;; pa_*) XKBLAYOUT=us,in # India XKBVARIANT=,guru # Gurmukhi ;; si_*) XKBLAYOUT=us,si # Sri Lanka XKBVARIANT=,sin_phonetic # Sinhala ;; sr_*) XKBLAYOUT=rs,rs # Serbia and Montenegro XKBVARIANT=latin, layout_priority=critical ;; sv_*) XKBLAYOUT=se # Sweden ;; ta_*) XKBLAYOUT=us,in # India XKBVARIANT=,tam # Tamil ;; te_*) XKBLAYOUT=us,in # India XKBVARIANT=,tel # Telugu ;; tg_*) XKBLAYOUT=us,tj # Tajikistan ;; the_*) XKBLAYOUT=us,np # Nepali keymap for Tharu ;; tl_*) XKBLAYOUT=ph # Philipines ;; ug_*) XKBLAYOUT=us,cn # China XKBVARIANT=,ug # Uyghur ;; zh_*) XKBLAYOUT=cn # Chinese ;; # Fallback *) XKBLAYOUT=us ;; esac ###################################################################### # Overwrite (some of) the computed default values by: # - preseeded values (for the udeb); # - the value of debian-installer/keymap # - the contents of /etc/X11/xorg.conf # - the settings in the configuration files (/etc/default/...). # - correct some bugs of previous versions of console-setup ###################################################################### # Get defaults from debconf, to allow preseeding in the udeb if db_get keyboard-configuration/modelcode && [ "$RET" ]; then XKBMODEL="$RET" fi if db_get keyboard-configuration/layoutcode && [ "$RET" ]; then # Don't use the default variant if the layout is being overridden. if [ "$RET" != "$XKBLAYOUT" ]; then XKBVARIANT='' fi XKBLAYOUT="$RET" if db_fget keyboard-configuration/layoutcode seen && [ "$RET" = true ]; then layout_priority=medium db_set console-setup/ask_detect false db_fset console-setup/ask_detect seen true fi fi if db_get keyboard-configuration/variantcode && [ "$RET" ]; then XKBVARIANT="$RET" fi if db_get keyboard-configuration/optionscode && [ "$RET" ]; then XKBOPTIONS="$RET" fi # Use the value of console-data debian-installer/keymap to get better default # layout. This guesswork is copied from xserver-xorg.config. # Lower the priority of the Debconf question to medium. if db_get debian-installer/keymap && [ "$RET" ]; then di_keymap="${RET##mac-usb-}" di_keymap="${di_keymap%%-latin1}" old_xkbvariant="$XKBVARIANT" XKBVARIANT='' old_layout_priority=$layout_priority layout_priority=medium case "$di_keymap" in be2) XKBLAYOUT="be";; bg) XKBLAYOUT="us,bg";; br) XKBLAYOUT="us"; XKBVARIANT="intl";; br-abnt2) XKBLAYOUT="br"; XKBVARIANT="abnt2";; by) XKBLAYOUT="us,by";; cf) XKBLAYOUT="ca"; XKBVARIANT="fr";; croat) XKBLAYOUT="hr";; cz-lat2) XKBLAYOUT="cz";; de-latin1-nodeadkeys) XKBLAYOUT="de"; XKBVARIANT="nodeadkeys";; de) XKBLAYOUT="de";; dvorak) XKBLAYOUT="us"; XKBVARIANT="dvorak";; dk) XKBLAYOUT="dk";; es) XKBLAYOUT="es";; et) XKBLAYOUT="ee";; 'fi') XKBLAYOUT="fi";; fr-latin9) XKBLAYOUT="fr"; XKBVARIANT="latin9";; fr_CH) XKBLAYOUT="ch"; XKBVARIANT="fr";; fr) XKBLAYOUT="fr";; hebrew) XKBLAYOUT="us,il";; hu) XKBLAYOUT="hu";; gb) XKBLAYOUT="gb";; is) XKBLAYOUT="is";; it) XKBLAYOUT="it";; jp106) XKBLAYOUT="jp"; XKBVARIANT="106";; kr|kr106) XKBLAYOUT="kr"; XKBVARIANT='';; kr104) XKBLAYOUT="kr"; XKBVARIANT="kr104";; la) XKBLAYOUT="latam";; lt) XKBLAYOUT="lt";; lv-latin4) XKBLAYOUT="lv";; mac-us-std) XKBLAYOUT="us";; mac-de2-ext) XKBLAYOUT="de"; XKBVARIANT="nodeadkeys";; mac-fr2-ext) XKBLAYOUT="fr";; mac-fr3) XKBLAYOUT="fr";; mac-es) XKBLAYOUT="es";; ky) XKBLAYOUT="us,kg";; mk) XKBLAYOUT="us,mk";; nl) XKBLAYOUT="nl";; no) XKBLAYOUT="no";; pl) XKBLAYOUT="pl";; pt) XKBLAYOUT="pt";; ro) XKBLAYOUT="ro";; ru) XKBLAYOUT="us,ru";; se) XKBLAYOUT="se";; sg) XKBLAYOUT="ch"; XKBVARIANT="de";; sk-qwerty) XKBLAYOUT="sk"; XKBVARIANT="qwerty";; slovene) XKBLAYOUT="si";; sr-cy) XKBLAYOUT="rs,rs"; XKBVARIANT="latin," ;; trf|trfu) XKBLAYOUT="tr"; XKBVARIANT="f";; trq|trqu) XKBLAYOUT="tr";; ua) XKBLAYOUT="us,ua";; uk) XKBLAYOUT="gb";; us) XKBLAYOUT="us";; *) XKBVARIANT="$old_xkbvariant" layout_priority=$old_layout_priority ;; esac fi # Get default layout from xorg.conf if available # Lower the priority of the Debconf question to medium. if \ [ -f /etc/X11/xorg.conf -a ! -e $CONFIGFILE ] \ && which awk 2>/dev/null >/dev/null then awk_expr=' { sub("#.*","") line = $0; $0 = tolower($0); xkb = ""; } /^[ \t]*section[ \t]+"inputdevice"/,/^[ \t]*endsection/ { if ($1 == "option") { if ($2 == "\"xkbmodel\"") { xkb = "XKBMODEL"; } else if ($2 == "\"xkblayout\"") { xkb = "XKBLAYOUT"; print "layout_priority=medium"; } else if ($2 == "\"xkbvariant\"") { xkb = "XKBVARIANT"; } else if ($2 == "\"xkboptions\"") { xkb = "XKBOPTIONS"; } $0 = line; $1 = ""; $2 = ""; } } xkb != "" && /^[ \t]*\"[^"]+\"[ \t]*$/ { sub("^[ \t]*\"", ""); sub("\".*", ""); gsub("[ \t]", ""); if ($1 !~ /[()]/) { print xkb "=\"" $0 "\""; } else { if (xkb == "XKBLAYOUT" && $1 ~ /^[^()]+\([^()]+\)$/) { l=$1; # us(intl),cz(qwerty) gsub(/\([^()]*\)/,"",l); # us,cz v=$1; # us(intl),cz(qwerty) us,bg gsub(/\)/,"",v); # us(intl,cz(qwerty us,bg gsub(/^[^(,]*,/,",",v); # us(intl,cz(qwerty ,bg gsub(/^[^(,]*$/,"",v); # us(intl,cz(qwerty ,bg gsub(/^[^(,]*\(/,"",v); # intl,cz(qwerty ,bg gsub(/,[^(,]*,/,",,",v); # intl,cz(qwerty ,bg gsub(/,[^(,]*$/,",",v); # intl,cz(qwerty , gsub(/,[^(,]*\(/,",",v); # intl,qwerty , print "XKBLAYOUT=" l; print "XKBVARIANT=" v; } } } ' eval $(awk "$awk_expr" < /etc/X11/xorg.conf) fi # Load the config file, if it exists. Overwrite the current values of # XKBMODEL, XKBLAYOUT, XKBVARIANT, and XKBOPTIONS in the process. read_config $OLDCONFIGFILE read_config $CONFIGFILE XKBMODEL=$(echo $XKBMODEL | sed 's/ *//g') XKBLAYOUT=$(echo $XKBLAYOUT | sed 's/ *//g') XKBVARIANT=$(echo $XKBVARIANT | sed 's/ *//g') # Version 1.37 of console-setup would destroy the values of $XKBMODEL, # $XKBLAYOUT and $XKBVARIANT in the configfile if sharutils was not # installed. Version 1.47 destroyed $XKBMODEL. if [ -z "$XKBMODEL" ]; then model_priority=critical XKBMODEL=pc105 db_fset keyboard-configuration/model seen false fi if [ -z "$XKBLAYOUT" ]; then layout_priority=critical XKBLAYOUT=us db_fset keyboard-configuration/layout seen false db_fset keyboard-configuration/variant seen false fi ####################################################################### # If the computer doesn't have keyboard then do not ask questions, # simply store the default values in the configuration file. This # is in order to support headless installs in d-i. The regular # packages (console-setup and console-setup-mini) should not be # installed on such sistems. ####################################################################### if ! keyboard_present; then # No questions, just store the defaults for postinst db_set keyboard-configuration/modelcode "$XKBMODEL" db_set keyboard-configuration/layoutcode "$XKBLAYOUT" db_set keyboard-configuration/variantcode "$XKBVARIANT" if [ -z "$XKBOPTIONS" -a ! -f $CONFIGFILE ]; then case "$XKBLAYOUT" in *,*) XKBOPTIONS="grp_led:scroll";; us) XKBOPTIONS="";; *) XKBOPTIONS="lv3:ralt_switch";; esac fi db_set keyboard-configuration/optionscode "$XKBOPTIONS" exit 0 fi ####################################################################### # Compute default values for the Debconf questions. For example # from XKBLAYOUT=us,el we obtain debconf_layout=el and from # XKBOPTIONS=lv3:ralt_switch we obtain debconf_altgr='Right Alt (AltGr)' ####################################################################### # Set debconf_model. There is no difference between debconf_model and # XKBMODEL, but lets create a new variable for consistency. debconf_model="$XKBMODEL" # Compute debconf_layout, debconf_variant and unsupported_layout based # on values of $XKBLAYOUT and $XKBVARIANT. if [ "$XKBLAYOUT" ]; then case "$XKBLAYOUT" in lt,us) debconf_layout="${XKBLAYOUT%,*}" debconf_variant="${XKBVARIANT%,*}" unsupported_layout=no ;; rs,rs|us,rs|jp,jp|us,jp) debconf_layout="${XKBLAYOUT#*,}" debconf_variant="${XKBVARIANT#*,}" unsupported_layout=no ;; # TODO: make s.t. to not forget to update this list us,am|us,af|us,ara|us,ben|us,bd|us,bg|us,bt|us,by|us,cn|us,et|us,ge|us,gh|us,gr|us,guj|us,guru|us,il|us,in|us,ir|us,iku|us,iq|us,ir|us,kan|us,kh|us,kz|us,la|us,lao|us,lk|us,lt|us,kg|us,ma|us,mal|us,mk|us,mm|us,mn|us,mv|us,np|us,ori|us,pk|us,ru|us,scc|us,sy|us,syr|us,tel|us,th|us,tj|us,tam|us,tib|us,ua|us,ug|us,uz) if [ "${XKBVARIANT%,*}" = '' ]; then debconf_layout="${XKBLAYOUT#*,}" debconf_variant="${XKBVARIANT#*,}" unsupported_layout=no else unsupported_layout=yes fi ;; *,*) unsupported_layout=yes ;; *) debconf_layout="$XKBLAYOUT" debconf_variant="$XKBVARIANT" unsupported_layout=no ;; esac fi # Make sure debconf_layout and debconf_variant point to existing in # $kbdnames layout and variant. If the requested layout and/or # variant are not in the $kbdnames, then we prefer debconf_layout=us # and debconf_variant='' if \ ! echo "$kbdnames" \ | grep "variant[*]$debconf_layout[*]$debconf_variant[*]" >/dev/null then unsupported_layout=yes debconf_variant='' if \ ! echo "$kbdnames" \ | grep "layout[*]$debconf_layout[*]" >/dev/null then debconf_layout=us fi fi # Compute debconf_* variables based on the value of $XKBOPTIONS. The # values of these variables are human-friendly text. debconf_toggle='No toggling' debconf_switch='No temporary switch' debconf_altgr='The default for the keyboard layout' debconf_compose='No compose key' debconf_ctrl_alt_bksp=false if [ "$XKBOPTIONS" ]; then debconf_toggle='No toggling' debconf_switch='No temporary switch' debconf_altgr='The default for the keyboard layout' debconf_compose='No compose key' for option in `echo $XKBOPTIONS | sed 's/,/ /g'`; do case "$option" in compose:caps) debconf_compose='Caps Lock';; compose:lwin) debconf_compose='Left Logo key';; compose:menu) debconf_compose='Menu key';; compose:ralt) debconf_compose='Right Alt (AltGr)';; compose:rctrl) debconf_compose='Right Control';; compose:rwin) debconf_compose='Right Logo key';; grp:alt_caps_toggle) debconf_toggle='Alt+Caps Lock';; grp:alt_shift_toggle) debconf_toggle='Alt+Shift';; grp:caps_toggle) debconf_toggle='Caps Lock';; grp:ctrl_alt_toggle) debconf_toggle='Control+Alt';; grp:ctrl_shift_toggle) debconf_toggle='Control+Shift';; grp:lalt_toggle) debconf_toggle='Left Alt';; grp:lctrl_lshift_toggle) debconf_toggle='Left Control+Left Shift';; grp:lctrl_toggle) debconf_toggle='Left Control';; grp:lshift_toggle) debconf_toggle='Left Shift';; grp:lswitch) debconf_switch='Left Alt';; grp:lwin_switch) debconf_switch='Left Logo key';; grp:lwin_toggle) debconf_toggle='Left Logo key';; grp:menu_toggle) debconf_toggle='Menu key';; grp:rctrl_toggle) debconf_toggle='Right Control';; grp:rshift_toggle) debconf_toggle='Right Shift';; grp:rwin_switch) debconf_switch='Right Logo key';; grp:rwin_toggle) debconf_toggle='Right Logo key';; grp:sclk_toggle) debconf_toggle='Scroll Lock key';; grp:switch) debconf_switch='Right Alt (AltGr)';; grp:toggle) debconf_toggle='Right Alt (AltGr)';; grp:win_switch) debconf_switch='Both Logo keys';; lv3:ralt_alt) debconf_altgr='No AltGr key';; lv3:alt_switch) debconf_altgr='Both Alt keys';; lv3:enter_switch) debconf_altgr='Keypad Enter key';; lv3:lalt_switch) debconf_altgr='Left Alt';; lv3:lwin_switch) debconf_altgr='Left Logo key';; lv3:menu_switch) debconf_altgr='Menu key';; lv3:ralt_switch) debconf_altgr='Right Alt (AltGr)';; lv3:rwin_switch) debconf_altgr='Right Logo key';; lv3:switch) debconf_altgr='Right Control';; lv3:win_switch) debconf_altgr='Both Logo keys';; terminate:ctrl_alt_bksp) debconf_ctrl_alt_bksp=true;; grp_led:scroll) ;; *) unsupported_options=yes ;; esac done fi # Store the default values for the options into debconf db. Notice we # do not store the default values for the model, the layout and the # variant since the respective questions are asked by the function # ask_debconf and it takes care to store in debconf db the reqired text. db_default keyboard-configuration/toggle "$debconf_toggle" db_default keyboard-configuration/switch "$debconf_switch" db_default keyboard-configuration/altgr "$debconf_altgr" db_default keyboard-configuration/compose "$debconf_compose" db_default keyboard-configuration/ctrl_alt_bksp "$debconf_ctrl_alt_bksp" ####################################################################### # Ask the Debconf questions starting from STATE=1. ####################################################################### # At this point if unsupported_layout=yes, then the values of # XKBLAYOUT and XKBVARIANT are relevant. Otherwise the values of # debconf_layout and debconf_variant have to be used. Notice the # difference between these variables - for example when # XKBLAYOUT=us,el we have debconf_layout=el. # Notice that the user may choose to disregard the fact that the # configuration is unsupported (question unsupported_config_layout). # Because of this, at this point we have to have sensible values for # debconf_layout and debconf_variant even when unsupported_layout=yes. STATE=1 old_state=0 while :; do starting_state=$STATE case "$STATE" in 1) if [ "$is_debian_installer" ]; then # do not ask model question in Debian installer db_set keyboard-configuration/modelcode "$debconf_model" db_fset keyboard-configuration/model seen true # skip the question without making Debconf loop STATE=$(( $STATE + $STATE - $old_state )) else if \ ask_debconf keyboard-configuration/model $model_priority \ model "$debconf_model" then debconf_model="$RET" db_set keyboard-configuration/modelcode "$RET" STATE=$(($STATE + 1)) else STATE=$(($STATE - 1)) fi fi ;; 2) if \ $detect_keyboard \ && [ "$XKBMODEL" != SKIP ] \ && [ -e "/usr/share/console-setup-mini/$XKBMODEL.tree" ] then db_input high console-setup/ask_detect || true if db_go; then STATE=$(($STATE + 1)) else STATE=$(($STATE - 1)) fi else STATE=$(($STATE + $STATE - $old_state)) fi ;; 3) if \ [ "$STATE" -ge "$old_state" ] \ && $detect_keyboard \ && [ "$XKBMODEL" != SKIP ] \ && [ -e "/usr/share/console-setup-mini/$XKBMODEL.tree" ] \ && db_get console-setup/ask_detect \ && [ "$RET" = true ] then db_subst console-setup/detect FILENAME \ "/usr/share/console-setup-mini/$XKBMODEL.tree" if db_input critical console-setup/detect && db_go; then db_get console-setup/detect detected_keyboard="$RET" # TODO: produce human-readable layout name db_subst console-setup/detected LAYOUT "$detected_keyboard" db_input high console-setup/detected || true if db_go; then unsupported_layout=no STATE=$(($STATE + 1)) else detected_keyboard= STATE=$(($STATE - 1)) fi else STATE=$(($STATE - 1)) fi else detected_keyboard= STATE=$(($STATE + $STATE - $old_state)) fi ;; 4) if [ "$detected_keyboard" ] || [ "$XKBMODEL" = SKIP ]; then STATE=$(( $STATE + $STATE - $old_state )) elif [ "$unsupported_layout" = yes ]; then # For the question about the keeping of the # unsupported configuration we use two different # Debconf templates depending on whether the # unsupported layout/variant combination has been # taken from existing configuration file (obviously in # this case the admin is responsible) or it has been # computed based on the system configuration such as # the locale or xorg.conf (in which case the user may # be unaware). if [ -f $CONFIGFILE ]; then template=keyboard-configuration/unsupported_config_layout else template=keyboard-configuration/unsupported_layout case "$XKBVARIANT" in ,|,,|,,,|'') db_subst $template XKBLAYOUTVARIANT "$XKBLAYOUT" ;; *) db_subst $template XKBLAYOUTVARIANT \ "$XKBLAYOUT/$XKBVARIANT" ;; esac fi db_subst $template XKBLAYOUT "$XKBLAYOUT" db_subst $template XKBVARIANT "$XKBVARIANT" db_input medium $template || true if db_go; then STATE=$(($STATE + 1)) else # The following code is for the following # situation: admin creates unsupported # configuration, then asks c-s not to keep this # configuration (i.e. gives answer 'no' to this # question), then restores by hand the unsupported # configuration. Un upgrade the old answer to # this question will be remembered by Debconf so # c-s will overwrite the configuration. See #729321. db_reset $template || true db_fset $template seen false STATE=$(($STATE - 1)) fi db_get $template if [ "$RET" != true ]; then unsupported_layout=no fi else # The following code is for the following situation: # first admin configures unsupported configuration, # then gives answer to keep the configuration. After # that admin configures (by hand) a supported # configuration. And after that again unsupported. # In this case we want the question about unsupported # layout to be asked again. db_reset keyboard-configuration/unsupported_config_layout || true db_fset keyboard-configuration/unsupported_config_layout seen false db_reset keyboard-configuration/unsupported_layout || true db_fset keyboard-configuration/unsupported_layout seen false # skip the question without making Debconf loop STATE=$(( $STATE + $STATE - $old_state )) fi ;; 5) if [ "$detected_keyboard" ]; then XKBLAYOUT="${detected_keyboard%%:*}" debconf_layout="$XKBLAYOUT" db_set keyboard-configuration/layoutcode "$XKBLAYOUT" # skip the question without making Debconf loop STATE=$(( $STATE + $STATE - $old_state )) elif [ "$XKBMODEL" = SKIP ]; then STATE=$(( $STATE + $STATE - $old_state )) elif [ "$unsupported_layout" = yes ]; then # skip the question without making Debconf loop STATE=$(( $STATE + $STATE - $old_state )) elif \ ask_debconf keyboard-configuration/layout "$layout_priority" \ layout "$debconf_layout" then debconf_layout="$RET" STATE=$(($STATE + 1)) else # always to the next question STATE=$(($STATE + 1)) fi ;; 6) adjust_layout=false if [ "$detected_keyboard" ]; then case $detected_keyboard in *:*) variant="${detected_keyboard#*:}" ;; *) variant= ;; esac debconf_variant="$variant" adjust_layout=: # skip the question without making Debconf loop STATE=$(( $STATE + $STATE - $old_state )) elif [ "$XKBMODEL" = SKIP ]; then STATE=$(( $STATE + $STATE - $old_state )) elif [ "$unsupported_layout" = yes ]; then STATE=$(( $STATE + $STATE - $old_state )) elif \ ! ask_debconf keyboard-configuration/variant \ "$layout_priority" \ "variant*${debconf_layout}" \ "$debconf_variant" then # skip the previous question starting_state=$(($STATE - 1)) STATE=$(($STATE - 2)) else debconf_variant="$RET" variant="$RET" adjust_layout=: STATE=$(($STATE + 1)) fi # Compute $XKBLAYOUT and $XKBVARIANT and store their # values in debconf db. if $adjust_layout; then case "$debconf_layout" in rs) case "$debconf_variant" in latin*) XKBLAYOUT=$debconf_layout ;; *) XKBLAYOUT=rs,rs ;; esac ;; jp) case "$debconf_variant" in 106|common|OADG109A|nicola_f_bs|'') XKBLAYOUT=$debconf_layout ;; *) XKBLAYOUT=jp,jp ;; esac ;; lt) XKBLAYOUT=lt,us ;; me) case "$debconf_variant" in basic|latin*) XKBLAYOUT=$debconf_layout ;; *) XKBLAYOUT=me,me ;; esac ;; af|am|ara|ben|bd|bg|bt|by|et|ge|gh|gr|guj|guru|il|'in'|iq|ir|iku|kan|kh|kz|la|lao|lk|kg|ma|mk|mm|mn|mv|mal|np|ori|pk|ru|scc|sy|syr|tel|th|tj|tam|tib|ua|ug|uz) XKBLAYOUT=us,$debconf_layout ;; *) XKBLAYOUT=$debconf_layout ;; esac case "$XKBLAYOUT" in rs,rs) case "$debconf_variant" in yz) XKBVARIANT="latinyz,$debconf_variant" ;; alternatequotes) XKBVARIANT="latinalternatequotes,$debconf_variant" ;; *) XKBVARIANT="latin,$debconf_variant" ;; esac ;; lt,us) case "$debconf_variant" in us) XKBVARIANT="us," ;; *) XKBVARIANT="$debconf_variant,altgr-intl" ;; esac ;; *,*) XKBVARIANT=",$debconf_variant" ;; *) XKBVARIANT="$debconf_variant" ;; esac fi db_set keyboard-configuration/layoutcode "$XKBLAYOUT" db_set keyboard-configuration/variantcode "$XKBVARIANT" ;; 7) if \ [ "$unsupported_options" = yes -a "$is_not_debian_installer" ] then if [ -f $CONFIGFILE ]; then template=keyboard-configuration/unsupported_config_options else template=keyboard-configuration/unsupported_options fi db_subst $template XKBOPTIONS "$XKBOPTIONS" db_input medium $template || true if db_go; then STATE=$(($STATE + 1)) else db_reset $template || true db_fset $template seen false STATE=$(($STATE - 1)) fi db_get $template if [ "$RET" != true ]; then unsupported_options=no fi else db_reset keyboard-configuration/unsupported_config_options || true db_fset keyboard-configuration/unsupported_config_options seen false db_reset keyboard-configuration/unsupported_options || true db_fset keyboard-configuration/unsupported_options seen false # skip the question without making Debconf loop STATE=$(( $STATE + $STATE - $old_state )) fi ;; 8) if [ "$unsupported_options" = yes ]; then db_set keyboard-configuration/optionscode "$XKBOPTIONS" # skip the questions without making Debconf loop STATE=$(( $STATE + $STATE - $old_state )) elif [ "$XKBMODEL" = SKIP ]; then STATE=$(( $STATE + $STATE - $old_state )) else caps_allocated=no lalt_allocated=no lctrl_allocated=no lshift_allocated=no lwin_allocated=no menu_allocated=no ralt_allocated=no rctrl_allocated=no rshift_allocated=no rwin_allocated=no case "$XKBLAYOUT" in *,*) ;; *) db_set keyboard-configuration/toggle 'No toggling' db_set keyboard-configuration/switch 'No temporary switch' ;; esac db_beginblock case "$XKBLAYOUT" in *,*) db_input high keyboard-configuration/toggle || true if [ "$is_not_debian_installer" ]; then db_input medium keyboard-configuration/switch || true fi ;; *) ;; esac if [ "$is_not_debian_installer" ]; then db_input medium keyboard-configuration/altgr || true db_input medium keyboard-configuration/compose || true fi if [ -f /usr/bin/X ]; then db_input medium keyboard-configuration/ctrl_alt_bksp || true fi db_endblock if db_go; then STATE=$(($STATE + 1)) else STATE=$(($STATE - 1)) fi db_get keyboard-configuration/toggle case "$RET" in Caps\ Lock) caps_allocated=yes toggle=caps_toggle;; Right\ Alt*) ralt_allocated=yes toggle=toggle;; Right\ Control) rctrl_allocated=yes toggle=rctrl_toggle;; Right\ Shift) rshift_allocated=yes toggle=rshift_toggle;; Right\ Logo?key) rwin_allocated=yes toggle=rwin_toggle;; Menu?key) menu_allocated=yes toggle=menu_toggle;; Alt+Shift) toggle=alt_shift_toggle;; Control+Shift) toggle=ctrl_shift_toggle;; Left\ Control+Left\ Shift) toggle=lctrl_lshift_toggle;; Scroll\ Lock\ key) toggle=sclk_toggle;; Alt+Caps\ Lock) toggle=alt_caps_toggle;; Control+Alt) toggle=ctrl_alt_toggle;; Left\ Alt) lalt_allocated=yes toggle=lalt_toggle;; Left\ Control) lctrl_allocated=yes toggle=lctrl_toggle;; Left\ Shift) lshift_allocated=yes toggle=lshift_toggle;; Left\ Logo?key) lwin_allocated=yes toggle=lwin_toggle;; No\ toggling) toggle='';; *) echo Unknown toggle key option exit 1 ;; esac if [ "$toggle" ]; then toggle=grp:$toggle fi db_get keyboard-configuration/switch switch='' case "$RET" in Right\ Alt*) if [ "$ralt_allocated" != yes ]; then switch=switch ralt_allocated=yes fi;; Left\ Alt) if [ "$lalt_allocated" != yes ]; then switch=lswitch lalt_allocated=yes fi;; Right\ Logo?key) if [ "$rwin_allocated" != yes ]; then switch=rwin_switch rwin_allocated=yes fi;; Left\ Logo?key) if [ "$lwin_allocated" != yes ]; then switch=lwin_switch lwin_allocated=yes fi;; Both\ Logo?keys) if \ [ "$rwin_allocated" != yes ] \ && [ "$lwin_allocated" != yes ] then switch=win_switch rwin_allocated=yes lwin_allocated=yes fi;; No\ temporary\ switch) switch='';; *) echo Unknown switch key option exit 1 ;; esac if [ "$switch" ]; then switch=grp:$switch fi db_get keyboard-configuration/altgr altgr='' case "$RET" in The?default?for?the?keyboard?layout) altgr='';; No?AltGr?key) if [ "$ralt_allocated" != yes ]; then # no need for ralt_allocated=yes altgr=ralt_alt fi;; Right?Alt*) if [ "$ralt_allocated" != yes ]; then altgr=ralt_switch ralt_allocated=yes fi;; Right?Control) if [ "$rctrl_allocated" != yes ]; then altgr=switch rctrl_allocated=yes fi;; Menu?key) if [ "$menu_allocated" != yes ]; then altgr=menu_switch menu_allocated=yes fi;; Keypad?Enter?key) altgr=enter_switch;; Right?Logo?key) if [ "$rwin_allocated" != yes ]; then altgr=rwin_switch rwin_allocated=yes fi;; Left?Logo?key) if [ "$lwin_allocated" != yes ]; then altgr=lwin_switch lwin_allocated=yes fi;; Both?Logo?keys) if \ [ "$rwin_allocated" != yes ] \ && [ "$lwin_allocated" != yes ] then altgr=win_switch rwin_allocated=yes lwin_allocated=yes fi;; Both?Alt?keys) if \ [ "$lalt_allocated" != yes ] \ && [ "$ralt_allocated" != yes ] then altgr=alt_switch ralt_allocated=yes lalt_allocated=yes fi;; Left?Alt) if [ "$lalt_allocated" != yes ]; then altgr=lalt_switch lalt_allocated=yes fi;; *) echo Unknown altgr key option exit 1 ;; esac if [ "$altgr" ]; then altgr=lv3:$altgr fi db_get keyboard-configuration/compose compose='' case "$RET" in No?compose?key) compose='';; Right?Alt*) if [ "$ralt_allocated" != yes ]; then compose=ralt ralt_allocated=yes fi;; Right?Logo?key) if [ "$rwin_allocated" != yes ]; then compose=rwin rwin_allocated=yes fi;; Left?Logo?key) if [ "$lwin_allocated" != yes ]; then compose=lwin lwin_allocated=yes fi;; Right?Control) if [ "$rctrl_allocated" != yes ]; then compose=rctrl rctrl_allocated=yes fi;; Menu?key) if [ "$menu_allocated" != yes ]; then compose=menu menu_allocated=yes fi;; Caps?Lock) if [ "$caps_allocated" != yes ]; then compose=caps caps_allocated=yes fi;; *) echo Unknown compose key option exit 1 ;; esac if [ "$compose" ]; then compose=compose:$compose fi db_get keyboard-configuration/ctrl_alt_bksp if [ "$RET" = true ]; then terminate=terminate:ctrl_alt_bksp else terminate='' fi # A fix for #566009 if [ "$ralt_allocated" = yes -a "$altgr" = lv3:ralt_alt ]; then altgr='' fi case "$XKBLAYOUT" in *,*) leds=grp_led:scroll;; *) leds='';; esac options=$( echo $toggle $switch $altgr $compose $terminate $leds \ | sed -e 's/^ *//' -e 's/ *$//' -e 's/ */,/g' ) db_set keyboard-configuration/optionscode "$options" fi ;; *) break ;; esac old_state=$starting_state done if [ $STATE -eq 0 ]; then exit 10 else db_set keyboard-configuration/store_defaults_in_debconf_db false fi exit 0