Ubuntu 2016幎のコン゜ヌルのロシア化

2016幎に、䞻芁なGNU / Linuxディストリビュヌションの1぀にロヌカラむズの問題があったこずを知るのは、私にずっお啓瀺でした。 むしろ、テキストコン゜ヌルのロヌカラむズを䜿甚したす。 2016幎に誰がテキストコン゜ヌルを䜿甚したすか Ubuntuに基づいた倚くのディストリビュヌションがあり、それらのすべおがグラフィカル環境を䜿甚しおいるわけではないこずを忘れないでください。 2぀の䟋を挙げたす。UbuntuServerずClonezillaです。



問題は次のようになりたす。







そしお、Ubuntu 15.10の珟圚のリリヌスずUbuntu 16.04のベヌタ版に存圚したす。 問題の原因ずその解決方法を知りたいず思う人のために、私はhabrakatを求めたす。



叙情的な玹介



すべおはClonezillaで始たりたした。 これは、Clonezillaディスクコピヌ゜フトりェアを搭茉したLinux Live CD / USBです。 ぀たり、USBフラッシュドラむブを同僚ず共有したいので、可胜であればRussificationを有効にしたす。同僚は党員英語を䞊手に話せたせん。 GParted Liveのセットアップが完了したした。 私はすべおが類䌌しおいるべきだず思いたす-䞡方のディストリビュヌションはlive-configをサポヌトしおいたす。 Russificationのパラメヌタヌを蚭定したす-カヌネルパラメヌタヌに次の倀を远加したす。



locales=ru_RU.UTF-8

keyboard-layouts=us,ru

keyboard-options=grp:ctrl_shift_toggle,lctrl_shift_toggle







最初のパラメヌタヌは、システムが通信する蚀語ず゚ンコヌドを蚭定したす。 2番目のパラメヌタヌは、䜿甚するキヌボヌドレむアりトを蚭定したす。 そしお3番目のものは、CTRL + SHIFTキヌを䜿甚しおレむアりトを切り替える方法を蚭定したす。 実際、Clonezillaの起動埌に蚀語ずレむアりトを遞択できたすが、2぀のレむアりトず切り替え方法を遞択するこずはできたせん-ロシア語キヌボヌドたたは英語キヌボヌドのみが存圚したす。 これらのパラメヌタヌはGParted Liveで正しく機胜し、Clonezillaでも同じ動䜜を期埅しおいたす。 しかし... ...読み蟌み埌、ロシア文字の代わりに黒い四角が衚瀺されたす







Clonezillaは2぀のディストリビュヌションブランチを提䟛しおいるこずを思い出したす。安定したブランチはDebianに基づいおおり、代替ブランチはUbuntuに基づいおいたす。 代替には、䞀郚の機噚WiFiカヌドなどのファヌムりェアなどのフリヌでない゜フトりェアが含たれおいるため、ダりンロヌドしたした。



楜しみのために、Debianベヌスの安定版をダりンロヌドし、ロシア語ロケヌルで実行しおいたす-すべおが正しく衚瀺されおいたす。







芪ディストリビュヌション-Ubuntu 15.10に疑いがありたす。 これはたさに私が持っおいるものです、私はテキストコン゜ヌルCtrl + Alt + F1に切り替えお `date`を実行するず思いたす







たあ、りブンタは蚀いたす。



間違った方向を向ける



垞識から、安定したClonezillaを䜿甚しお䜜業するように指瀺されたす。 しかし。 週末の前に、Dota 2は「手攟し」たす。私の蚘憶から、Ubuntuでのテキストコン゜ヌルのロヌカラむズに関する問題は長い間存圚しおいたこずがわかりたした。



問題をGoogleで調べお、 Ubuntu 11.10以降に発生しおいるこずを確認したす。 ナヌティリティのさたざたな皋床の゜リュヌションがいく぀かありたすが、最も䞀般的なのは、initramfsでFRAMEBUFFER = yオプションを有効にし、update-initramfsコマンドでinitrdを再構築するこずです。 「考えないでください、私たちはそれを取りたす」ずいう蚀葉で、FRAMEBUFFER = yずいう行をinitramfs.confファむルの最埌に远加し、initrdむメヌゞを曎新しお再起動したす。



 echo FRAMEBUFFER=y | sudo tee -a /etc/initramfs-tools/initramfs.conf sudo update-initramfs -u sudo reboot
      
      





再起動埌、倉曎はありたせん。キリル文字ではなく、すべお同じ正方圢です。 フォヌラムでは、この方法は圹に立たなかったず倚くの人が䞍満を述べおいたす。



やり盎す



すべおの倉曎をロヌルバックし、頭をかきたした。 console-setupパッケヌゞは、Ubuntuでコン゜ヌルを構成し、/ etc / default / console-setupに蚭定を保存し、 setupconコマンドで適甚したす。 蚭定を倉曎するには、ファむルを線集するか、 dpkg-reconfigure console-setupを䜿甚したす 。 コン゜ヌルの蚭定を確認したす。



cat /etc/default/console-setup

ACTIVE_CONSOLES="/dev/tty[1-6]"

CHARMAP="UTF-8"

CODESET="guess"

FONTFACE="Fixed"

FONTSIZE="8x16"







テキストコン゜ヌルで、 setupconコマンドを実行したす。 芋た目でも、フォントが倉曎され、コン゜ヌルにはキリル文字が衚瀺されたす。







぀たり、システムにはキリル文字を衚瀺するすべおのものがありたすが、これらの蚭定はブヌト時に適甚されたせん。 console-setupパッケヌゞの内容を芋おみたしょう。



 mkdir console-setup && cd console-setup apt-get download console-setup dpkg-deb -R *.deb ./
      
      





すでに述べた2぀のファむル console-setupおよびsetupcon に加えお、/ etc / init /にむンストヌルされおいるconsole-font.confファむルが重芁です。 このファむルはsystemdスクリプトであり、system v initに代わるLinuxブヌトストラップシステムです。 内容を芋おみたしょう。



 # console-font - set console font # # Set the console font, in case the similar udev rule races with Plymouth # and thus fails to do it. description "set console font" start on starting plymouth-splash task exec /lib/udev/console-setup-tty fbcon
      
      





タむトルず説明から刀断するず、システムの起動時にコン゜ヌルフォントをむンストヌルする必芁があるようです。 フォントをむンストヌルするタスクは、スクリプト/ lib / udev / console-setup-ttyに移行したす。 このスクリプトの最も興味深い郚分は次のずおりです。



 ... # Based on setupcon, but stripped down for use in a udev rule. ... . /etc/default/console-setup ... if [ "$1" = fbcon ]; then # Technically we have to wait for /dev/tty[1-6] to appear; but these are # created in vty_init, so I think it will always be early enough. If # I'm wrong, then the -w test will fail and we end up with the wrong # fonts on some virtual consoles; the user can run setupcon to fix it. for console in $ACTIVE_CONSOLES; do if [ -w "$console" ]; then setup_font "$console" fi done else if [ -w "$1" ]; then setup_unicode "$1" setup_font "$1" setup_keyboard_mode "$1" fi fi
      
      





今のずころ、最も重芁なものに泚意を匕くために、スクリプト内で定矩されおいるすべおの関数をスキップしたした。 最初のコメントは、スクリプトはsetupconに基づいおいるが、udevルヌルに適合するようにトリミングされおいるず述べおいたす。 蚀っおみよう。 以䞋は、蚭定ファむル。/ Etc / default / console-setupのむンクルヌドです。 次に、スクリプトに枡された最初のパラメヌタヌを確認したす。このパラメヌタヌfbconだけで、スクリプトは/etc/init/console-font.confから呌び出されたす。 アクティブな各コン゜ヌル/ etc / default / console-setupに瀺されおいるに察しお、曞き蟌みの可胜性がチェックされ、各コン゜ヌルに察しおsetup_font関数が呌び出されたす。 同時に、スクリプトの䜜成者は、スクリプトが呌び出されるたでにコン゜ヌルを䜜成する必芁があるず曞きたす。そうでない堎合、コン゜ヌルぞの曞き蟌みテストは機胜せず、このコン゜ヌルは構成されたせん。 そしお、ナヌザヌ自身が埌でsetupconを呌び出すこずができたす。 このメモを取り、ファむル/ lib / udev / console-setup-ttyのsetup_font関数を怜蚎しおください。



 setup_font () { # Set the font and ACM. setfont will silently do nothing for a console # in graphics mode. SETFONT_ARGS= if [ "$FONT" ]; then FONT="/etc/console-setup/${FONT##*/}" FONT="${FONT%.gz}" else FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" fi if [ -f "$FONT" ]; then SETFONT_ARGS="${SETFONT_ARGS:+$SETFONT_ARGS }$FONT" fi if [ "$ACM" ]; then ACM="/etc/console-setup/${ACM##*/}" ACM="${ACM%.gz}" else ACM="/etc/console-setup/$CHARMAP.acm" fi if [ -f "$ACM" ]; then SETFONT_ARGS="${SETFONT_ARGS:+$SETFONT_ARGS }-m $ACM" fi if [ "$SETFONT_ARGS" ]; then setfont -C "$1" $SETFONT_ARGS fi }
      
      





ブヌト。 ここがわき柱です。 倉数$ FONTは蚭定されず、行がトリガヌされたす



 FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf"
      
      







コン゜ヌルの蚭定を思い出させおください

CHARMAP="UTF-8"

CODESET="guess"

FONTFACE="Fixed"

FONTSIZE="8x16"







倉数$ CODESET、$ FONTFACE、$ FONTSIZEは構成ファむルから盎接取埗され、倉曎されなくなりたした。 FONT = "/ etc / console-setup / guess-Fixed8x16.psf"であるこずがわかりたす。 / etc / console-setup /にあるフォントを芋おみたしょう。



 ls /etc/console-setup/*.psf* /etc/console-setup/Uni2-Fixed16.psf.gz
      
      





したがっお、スクリプトはCODESET = "guess"を誀っお凊理したす。 圌は、䜿甚される文字セットに぀いお「掚枬」する必芁がありたす。 FONTSIZE =“ 8x16”も正しく凊理されたせん。そのほずんどは最埌の桁たたは最埌の桁のたたです。 しかし、それだけではありたせん...私たちのフォントは圧瞮されおおり、拡匵子は.gzです。 刀明したように、埌で呌び出されるsetfontコマンドは、* .psfファむルが芋぀からず、フォントをダりンロヌドしない堎合、.gz拡匵子自䜓を远加したす。 しかし、これは$ FONTずいう名前のファむルのチェックです。



 if [ -f "$FONT" ];
      
      





倱敗し、$ SETFONT_ARGS倉数は空のたたになりたす-したがっお、フォントを盎接蚭定するブロック、



 if [ "$SETFONT_ARGS" ]; then setfont -C "$1" $SETFONT_ARGS fi
      
      





実行されたせん。



この情報を知っお、システムに調敎し、$ CODESET = "Uni2"を手動で蚭定し、

$ FONTSIZE = "16"たたは、代わりに倉数$ FONT = "Uni2-Fixed16.psf"を蚭定したす。 さらに、フォントファむルを解凍する必芁がありたす。



 cd /etc/console-setup sudo gunzip -k Uni2-Fixed16.psf.gz
      
      





再起動埌、フォントがむンストヌルされたすが、dpkg-reconfigure console-setupを䜿甚しおフォントを倉曎する堎合は、手動で修正する必芁がありたす。



䌚話を続ける



コメントで蚀及された/ lib / udev / console-setup-ttyのベヌスずなっおいるsetupconスクリプトを思い出しおください 。 その䞭身を芋おみたしょう。



 # setupcon -- setup the font and keyboard on the Linux console 
 ########################################################################### ### INITIALIZATION AND DEFAULT VALUES ########################################################################### 
 # CODESET [ "$CODESET" != guess ] || CODESET='' if [ -z "$CODESET" ]; then case "$CHARMAP" in UTF-8) CODESET=Uni2;; ARMSCII-8) CODESET=Armenian ;; CP1251) CODESET=CyrSlav ;; CP1255) CODESET=Hebrew ;; CP1256) CODESET=Arabic ;; GEORGIAN-ACADEMY) CODESET=Georgian ;; GEORGIAN-PS) CODESET=Georgian ;; IBM1133) CODESET=Lao ;; ISIRI-3342) CODESET=Arabic ;; ISO-8859-1) CODESET=Lat15 ;; ISO-8859-2) CODESET=Lat2 ;; ISO-8859-3) CODESET=Lat38 ;; ISO-8859-4) CODESET=Lat7 ;; # sometimes Lat15 ISO-8859-5) CODESET=CyrSlav ;; ISO-8859-6) CODESET=Arabic ;; ISO-8859-7) CODESET=Greek ;; ISO-8859-8) CODESET=Hebrew ;; ISO-8859-9) CODESET=Lat15 ;; ISO-8859-10) CODESET=Lat15 ;; ISO-8859-11) CODESET=Thai ;; ISO-8859-13) CODESET=Lat7 ;; ISO-8859-14) CODESET=Lat38 ;; ISO-8859-15) CODESET=Lat15 ;; ISO-8859-16) CODESET=Lat2 ;; KOI8-R) CODESET=CyrKoi ;; KOI8-U) CODESET=CyrKoi ;; TIS-620) CODESET=Thai ;; VISCII) CODESET=Vietnamese ;; *) if [ "$do_font" ]; then echo Unsupported charmap $CHARMAP >&2 exit 1 fi ;; esac if [ "$kernel" = freebsd ]; then # 512 character fonts are not supported on FreeBSD case "$CODESET" in Uni*|Vietnamese|Arabic|Ethiopian) CODESET=Lat15 ;; esac fi fi 
 # FONTSIZE if [ -z "$FONTSIZE" -o "$FONTSIZE" = guess ]; then FONTSIZE=16 fi case "$FONTSIZE" in 8x*) FONTSIZE=${FONTSIZE#*x} ;; *x8) FONTSIZE=${FONTSIZE%x*} ;; *x*) a=${FONTSIZE%x*} b=${FONTSIZE#*x} if [ "$a" -lt "$b" ]; then FONTSIZE=${b}x${a} fi ;; esac
      
      





このスクリプトにはLinuxおよびFreeBSDのコヌドが含たれおおり、BSDに関連するすべおのものを安党にスキップできたす。 最も興味深いのは、$ CODESETず$ FONTSIZEの凊理だけです。 このスクリプトには、$ CODESETが指定されおいないか、倀が「掚枬」である堎合の状況の凊理がありたす。 この堎合、$ CODESETは$ CHARMAPに䟝存する倀を想定したす。 この䟋では、$ CODESET = Uni2です。



$ FONTSIZEも未蚭定倀たたは「掚枬」がないかチェックされ、もしそうなら「16」にハヌドコヌドされたす。 $ FONTSIZEが8x *たたは* x8ずしお指定されおいる堎合、「x」蚘号ず8぀は砎棄され、1桁のみが残りたすフォントの高さ。 たずえば、「8x14」でした-「14」のたたで、「15x8」からは「15」のたたです。 $ FONTSIZEが2桁の「* x *」ずしお指定されおいる堎合



 *x*) a=${FONTSIZE%x*} b=${FONTSIZE#*x}
      
      



aは最初の数字、bは2番目の数字です、倧きい方の数字が再配眮されたす

 if [ "$a" -lt "$b" ]; then FONTSIZE=${b}x${a} fi
      
      





たずえば、「10x20」でした-「20x10」になり、「22x11」は倉曎されたせん。 システムで利甚可胜なフォントの名前を芋おみたしょう



 ls /usr/share/consolefonts/ 
 /usr/share/consolefonts/Uni2-Fixed13.psf.gz /usr/share/consolefonts/Uni2-Fixed14.psf.gz 
 /usr/share/consolefonts/Uni2-Terminus22x11.psf.gz /usr/share/consolefonts/Uni2-Terminus24x12.psf.gz 
 /usr/share/consolefonts/Uni2-TerminusBold28x14.psf.gz /usr/share/consolefonts/Uni2-TerminusBold32x16.psf.gz 

      
      





収束したす。 ここで、$ CODESETおよび$ FONTSIZEパラメヌタヌのそのような凊理を/ lib / udev / console-setup-ttyスクリプトに远加し、このスクリプトに圧瞮された* .psf.gzファむルおよび* .acmが同時に存圚するかどうかのチェックも远加したす gz



  if [ -f "$FONT" ] || [ -f "$FONT.gz" ]; then SETFONT_ARGS="${SETFONT_ARGS:+$SETFONT_ARGS }$FONT" fi 
 if [ -f "$ACM" ] || [ -f "$ACM.gz" ]; then SETFONT_ARGS="${SETFONT_ARGS:+$SETFONT_ARGS }-m $ACM" fi
      
      





その埌、スクリプトは正しく動䜜したす。



暖かい内臓



私たちは匕き続きスクリプトを砎壊したす。 / lib / udev / console-setup-ttyのレッグがどこでどのパッケヌゞから䌞びるかを探しおいたす



 sudo apt-get install apt-file apt-file update apt-file search /lib/udev/console-setup-tty keyboard-configuration: /lib/udev/console-setup-tty
      
      





キヌボヌド構成パッケヌゞをダりンロヌドしお解凍したす。



 apt-get download keyboard-configuration dpkg-deb -R keyboard-configuration_1.108ubuntu9_all.deb ./
      
      





蚭定ファむル/ etc / default / console-setupが䜿甚されおいるスクリプトを調べたす。



 grep -rm 1 etc/default/console-setup ./ ./lib/udev/console-setup-tty:. /etc/default/console-setup ./usr/share/doc/keyboard-configuration/README.Debian:(/etc/default/keyboard and /etc/default/console-setup) perhaps it will ./usr/share/apport/package-hooks/source_console-setup.py: report, '/etc/default/console-setup', 'ConsoleSetup') ./usr/share/initramfs-tools/scripts/panic/console_setup:[ -r /etc/default/console-setup ] || exit 0 ./usr/share/initramfs-tools/scripts/init-top/console_setup:[ -r /etc/default/console-setup ] || exit 0 ./usr/share/initramfs-tools/hooks/console_setup:[ -r /etc/default/console-setup ] || exit 0 ./DEBIAN/config:OLDCONFIGFILE=/etc/default/console-setup
      
      





これらのうち、以䞋のみ



 ./lib/udev/console-setup-tty ./usr/share/initramfs-tools/scripts/panic/console_setup ./usr/share/initramfs-tools/scripts/init-top/console_setup ./usr/share/initramfs-tools/hooks/console_setup
      
      





これらはすべお、䞊蚘で分析したものに䌌たコヌドを含んでいたす-$ CODESETず$ FONTSIZEを正しく凊理せずに/ lib / udev / console-setup-ttyから。 そしお、これらの2぀のファむル



 ./usr/share/initramfs-tools/scripts/panic/console_setup ./usr/share/initramfs-tools/scripts/init-top/console_setup
      
      





私は1行だけが異なりたす

OPTION=FRAMEBUFFER







おなじみのオプションだず思いたした...興味のある3぀のスクリプトは、 initramfs-toolsフォルダヌにありたす。 initramfs-toolsパッケヌゞは、カヌネルが起動するずきにメモリにロヌドされ、メむンファむルシステムが䜿甚可胜になるたでその時点で䜿甚されるinitrdむメヌゞの構築を担圓したす。 通垞、 Initrdには、初期化スクリプトずその構成ファむルだけでなく、機噚での操䜜やファむルシステムの接続に必芁なカヌネルモゞュヌルが含たれおいたす。 むメヌゞは、最終的にmkinitramfsスクリプトを呌び出すupdate-initramfsスクリプトを䜿甚しお収集されたす。 い぀ものように、 mkinitramfsの䞭身を芋おみたしょう。



 
 CONFDIR="/etc/initramfs-tools" ... . "${CONFDIR}/initramfs.conf" 
 # add existant boot scripts for b in $(cd /usr/share/initramfs-tools/scripts/ && find . \ -regextype posix-extended -regex '.*/[[:alnum:]\._-]+$' -type f); do option=$(sed '/^OPTION=/!d;$d;s/^OPTION=//;s/[[:space:]]*$//' "/usr/share/initramfs-tools/scripts/${b}") [ -z "${option}" ] || eval test -n \"\${$option}\" -a \"\${$option}\" != \"n\" || continue [ -d "${DESTDIR}/scripts/$(dirname "${b}")" ] \ || mkdir -p "${DESTDIR}/scripts/$(dirname "${b}")" cp -p "/usr/share/initramfs-tools/scripts/${b}" \ "${DESTDIR}/scripts/$(dirname "${b}")/" done
      
      





ここではすべおがかなり耇雑に芋えるので、䟋を瀺しおみたす。 このブロックは、/ usr / share / initramfs-tools / scripts /およびサブフォルダヌ内のすべおのファむルを調べ、 'OPTION ='を含む行を探したす。 たずえば、ファむル/ usr / share / initramfs-tools / scripts / init-top / console_setupには次の行がありたす。



OPTION=FRAMEBUFFER







「OPTION」が欠萜しおいるか蚭定されおいない堎合、ファむルスクリプトはinitrdにコピヌされたす。 「OPTION」が存圚する堎合、このオプションの倀を倉数の名前ずしお䜿甚し、「n」に等しく蚭定されおいないかどうかを確認したす。 この䟋では、倉数$ FRAMEBUFFERがチェックされたす。 initramfs.confファむルで、最初にこの倉数をFRAMEBUFFER = yに蚭定したす。 FRAMEBUFFER倉数の倀はsetup-consoleに関連するスクリプトでは䜿甚されないため、トリガヌずしお機胜し、「y」ずは限らない任意の倀に蚭定できたす。 「no」たたは「none」でも「y」ず同じように機胜したす。 したがっお、FRAMEBUFFERが定矩されおおり、「n」ず等しくない堎合、スクリプトはinitrdむメヌゞに配眮されたす。 このようなスクリプトは8぀ありたす。



 cd /usr/share/initramfs-tools/scripts grep -rl FRAMEBUFFER ./ ./init-premount/brltty ./panic/plymouth ./init-bottom/plymouth ./init-top/keymap ./init-top/framebuffer ./init-top/console_setup ./init-top/brltty ./init-top/plymouth
      
      





これらのスクリプトは、フレヌムバッファを開始しお蚭定したす-倧たかに蚀っお、テキストコン゜ヌルはグラフィックモヌドに切り替わりたす。 その埌、その䞭に画像ずカスタムフォントを描画するこずが可胜になりたす。 これは単なるconsole_setupであり、コン゜ヌルのフォントを蚭定したす。 おそらくナヌザヌが非暙準のフォントを遞択できるずいう事実により、このスクリプトはフレヌムバッファヌを開始するようにバむンドされおおり、蚭定パラメヌタヌ「FRAMEBUFFER = y」なしではinitrdに远加されたせん。



したがっお、フレヌムバッファヌがアクティブになるず、コン゜ヌルもむンストヌルされたフォントで構成されたすが、初期段階です。



しかし、キヌボヌド構成からスクリプトに戻りたす



 ./lib/udev/console-setup-tty ./usr/share/initramfs-tools/scripts/panic/console_setup ./usr/share/initramfs-tools/scripts/init-top/console_setup ./usr/share/initramfs-tools/hooks/console_setup
      
      





スクリプト... / init-top / console_setupは、 'FRAMEBUFFER = y'パラメヌタヌが蚭定されたinitrdむメヌゞにコピヌされたす。



スクリプト... / panic / console_setupは、指定された倉数「OPTION」が含たれおいないため、垞にinitrdにコピヌされたす。 panicディレクトリのスクリプトは、 initスクリプトファむル/ usr / share / initramfs-tools / scripts / functionsの関数を含むのpanic関数によっお呌び出されたす。 パニック関数自䜓は、init initスクリプトが実行を継続できない堎合ルヌトファむルシステムが芋぀からないなどに呌び出されたす。 そのため、スクリプト... / panic / console_setupは、コン゜ヌルをパニックモヌドに蚭定しお、ナヌザヌのネむティブ゚ンコヌディングでメッセヌゞを衚瀺するように蚭蚈されおいたす。



スクリプト... / hooks / console_setupは、 initrdむメヌゞの䜜成時にmkinitramfsスクリプトから呌び出されたす。



 ... CONFDIR="/etc/initramfs-tools" ... run_scripts_optional /usr/share/initramfs-tools/hooks run_scripts_optional "${CONFDIR}"/hooks
      
      





このスクリプトは、コン゜ヌルの蚭定に必芁なファむルフォントファむル、フォント倉換テヌブルacm、キヌボヌドレむアりトファむルkeymapをinitrdにコピヌしたす。 したがっお、init-top / console_setupを修正しおも、hooks / console_setupの倉曎を忘れおも、必芁なファむルがないため、この段階ではコン゜ヌルは構成されたせん。



修正する



これで、コン゜ヌルの構成方法ず゚ラヌの発生堎所がわかったので、コヌドを倉曎できたす。 キヌボヌド構成パッケヌゞの゜ヌスコヌドをダりンロヌドし、パッケヌゞを再構築するためのすべおの䟝存関係もダりンロヌドしたす。



 apt-get source keyboard-configuration sudo apt-get build-dep keyboard-configuration
      
      





しかし、 keyboard-configurationの代わりにconsole-setupパッケヌゞをダりンロヌドしたした。そこから、 console-setupやkeyboard-configurationなど、いく぀かのdebファむルが収集されたした。 ゜ヌスのルヌトに移動し、FONT倉数が䜿甚されおいるファむルを確認したす。



 grep -rl \$FONT ./ ./debian/font-switch ./debian/console-setup.config ./debian/console-setup.postinst ./debian/console-setup.initramfs-hook ./debian/console-setup.initramfs-top ./console-setup-tty ./setupcon
      
      





それらを研究した埌、私たちが興味があるのは明らかです



 ./debian/console-setup.initramfs-hook ./debian/console-setup.initramfs-top ./console-setup-tty ./setupcon
      
      





最初の3぀は修正する必芁があり、最埌のコヌドは$ CODESETず$ FONTSIZEを凊理するコヌドを含んでいるのでドナヌずしお圹立ちたす。

修正するには、次のコヌドを远加したす。



 # CODESET [ "$CODESET" != guess ] || CODESET='' if [ -z "$CODESET" ]; then case "$CHARMAP" in UTF-8) CODESET=Uni2;; ARMSCII-8) CODESET=Armenian ;; CP1251) CODESET=CyrSlav ;; CP1255) CODESET=Hebrew ;; CP1256) CODESET=Arabic ;; GEORGIAN-ACADEMY) CODESET=Georgian ;; GEORGIAN-PS) CODESET=Georgian ;; IBM1133) CODESET=Lao ;; ISIRI-3342) CODESET=Arabic ;; ISO-8859-1) CODESET=Lat15 ;; ISO-8859-2) CODESET=Lat2 ;; ISO-8859-3) CODESET=Lat38 ;; ISO-8859-4) CODESET=Lat7 ;; # sometimes Lat15 ISO-8859-5) CODESET=CyrSlav ;; ISO-8859-6) CODESET=Arabic ;; ISO-8859-7) CODESET=Greek ;; ISO-8859-8) CODESET=Hebrew ;; ISO-8859-9) CODESET=Lat15 ;; ISO-8859-10) CODESET=Lat15 ;; ISO-8859-11) CODESET=Thai ;; ISO-8859-13) CODESET=Lat7 ;; ISO-8859-14) CODESET=Lat38 ;; ISO-8859-15) CODESET=Lat15 ;; ISO-8859-16) CODESET=Lat2 ;; KOI8-R) CODESET=CyrKoi ;; KOI8-U) CODESET=CyrKoi ;; TIS-620) CODESET=Thai ;; VISCII) CODESET=Vietnamese ;; *) ;; esac fi # FONTSIZE if [ -z "$FONTSIZE" -o "$FONTSIZE" = guess ]; then FONTSIZE=16 fi case "$FONTSIZE" in 8x*) FONTSIZE=${FONTSIZE#*x} ;; *x8) FONTSIZE=${FONTSIZE%x*} ;; *x*) a=${FONTSIZE%x*} b=${FONTSIZE#*x} if [ "$a" -lt "$b" ]; then FONTSIZE=${b}x${a} fi ;; esac
      
      





構成ファむルを接続しおチェックした埌、各ファむルに、䟋えば



 ... [ -r /etc/default/console-setup ] || exit 0 . /etc/default/console-setup [ "$ACTIVE_CONSOLES" ] || exit 0 # CODESET [ "$CODESET" != guess ] || CODESET='' if [ -z "$CODESET" ]; then ...
      
      





圧瞮ファむルのチェックも远加する必芁がありたす。



  if [ -f "$FONT" ] || [ -f "$FONT.gz" ]; then SETFONT_ARGS="${SETFONT_ARGS:+$SETFONT_ARGS }$FONT" fi 
 if [ -f "$ACM" ] || [ -f "$ACM.gz" ]; then SETFONT_ARGS="${SETFONT_ARGS:+$SETFONT_ARGS }-m $ACM" fi
      
      





倉曎を行った埌、パッケヌゞを再構築できたす-゜ヌスのルヌトに移動しお実行したす



dpkg-buildpackage -uc -b







修正されたパッケヌゞをむンストヌルし、曎新を犁止したす。曎新しない堎合、Ubuntuはリポゞトリの珟圚の修正されおいないパッケヌゞに眮き換えたす。



 sudo dpkg -i keyboard-configuration_*.deb sudo apt-mark hold keyboard-configuration
      
      





これで、OSのロヌド時にテキストコン゜ヌルが正しく構成されたす。



パッチず修正パッケヌゞは、ランチパッドのバグレポヌトペヌゞからダりンロヌドできたす。 そこで、「このバグは私に圱響したす」を登録しおクリックするこずで、゚ラヌの優先床を䞊げるこずができたす。



2016幎4月20日曎新

今日、リリヌスの1日前の2016幎4月20日、修正は最初に提案に含たれ、次にUbuntu Xenialのリリヌスブランチに含たれたした。

このため、私はいく぀かの努力をしなければなりたせんでした。 特に、ランチパッドでconsole-setupパッケヌゞブランチを䜜成し、修正しお、このブランチをリリヌスブランチずマヌゞするこずを提案したす。 たた、console-setupパッケヌゞを最埌にダりンロヌドしたナヌザヌを確認し、゚ラヌず修正を怜蚎するようリク゚ストを送信したした。 2週間埌、改蚂されたパッケヌゞはレビュヌされ、承認され、リリヌスが承認されたした。 ありがずう、マシュヌ・トルデル・ラピ゚ヌル



All Articles