Debian 9.0へのアップグレード後の不具合対応 [Debian]
詳細は、以下の通りである。
・発生した不具合の一覧
cf. http://dan-project.blog.so-net.ne.jp/2017-06-25
1. 発生事象
X アプリでノード名を付けて指定したディスプレイを開けない。
(例) % xterm -display localhost:0 xterm: Xt error: Can't open display: localhost:0
・パッケージのバージョン
xserver-xorg 1:7.7+19
xserver-xorg-core 2:1.19.2-1
xinit 1.3.4-3+b1
2. 対処方法
/usr/bin/Xorg を変更し、起動時のオプションに '--listen tcp' を追加する。
# cd /usr/bin # diff Xorg Xorg.org 8c8 < exec "$basedir"/Xorg.wrap -listen tcp "$@" --- > exec "$basedir"/Xorg.wrap "$@" 10c10 < exec "$basedir"/Xorg -listen tcp "$@" --- > exec "$basedir"/Xorg "$@"
3. 備考
(1) /usr/bin/Xorg の変更により、6000 番ポートが Listen 状態になる。
% netstat -an | grep 6000 tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN tcp6 0 0 :::6000 :::* LISTEN
(2) /etc/X11/xinit/xserverrc の変更では効果がない。
# cd /etc/X11/xinit # diff xserverrc xserverrc.org 3c3 < exec /usr/bin/X "$@" --- > exec /usr/bin/X -nolisten tcp "$@"
Debian 9.0へのアップグレード時に発生した不具合への対応 [Debian]
以下は、その際に発生した事象とその対応をまとめたものである。
1. アップグレードの手順
これまでのバージョンでの実施手順と同様である。
cf. https://www.debian.org/releases/stretch/i386/release-notes/ch-upgrading.ja.html
2. 発生事象 (対応済)
(1) アップグレード後に LVM が認識されない
・ブート時に LVM が認識されない。
・マウントに失敗し、システムが正常に起動できない。
・emergency mode になる。
(a) 対処方法
下記の手順を実施し、initramfs image を更新する。
・emergency mode で、root のパスワードを入力
・lvscan を実行
・マウントに必要な VG に対して、'vgchange -ay
・exit を実行(emergency mode の終了)
・/boot/initrd.img-* の更新
(update-initramfs -c|-u -k `uname -r`)
・システムの再起動
(2) コンソールで、日本語キーボードとして認識されない
・/etc/default/keyboard は Debian 8 からの流用である。
・'localectl set-keymap jp106' の実行では改善されない。
・X 環境では日本語キーボードと認識される。
(a) 対処方法
/etc/rc.local に下記の設定を追加する。
loadkeys jp106
(3) 一般ユーザーで X を 起動できない。
・パッケージのバージョン: xserver-xorg 1:7.7+19
・/var/log/Xorg.0.log が作成されない。
(~/.local/share/xorg/Xorg.0.log が作成される。)
・ログファイルのエラーメッセージは、下記の通りである。
Fatal server error: (EE) parse_vt_settings: Cannot open /dev/tty0 (Permission denied)
(a) 対処方法
/etc/X11/Xwrapper.config を変更する。
# diff Xwrapper.config Xwrapper.config.org 14,15c14 < allowed_users=anybody < needs_root_rights=yes --- > allowed_users=console
・上記の対応後、/var/log/Xorg.0.log が作成されるようになる。
(4) mplayer で ~/.mplayer/{config,input.conf} の設定が反映されない。
(a) 原因
mplayer から mpv に変更されたためである。
・mplayer は mpv へのシンボリックリンクとなっている。
・mplayer と mpv では、設定ファイルのパスが異なる。
(b) 対処方法
下記のパスに設定ファイルを作成する。
~/.mpv/{config,input.conf}
または
~/.config/mpv/{mpv.conf,input.conf}
(c) 設定ファイルへの設定例
% cat ~/.mpv/config # display size and aspect ratio video-aspect=16:9 geometry=320 % cat ~/.mpv/input.conf # key bindings MOUSE_BTN3 volume 1 MOUSE_BTN4 volume -1
(5) gnome-session が想定通りの動作とならない。
・パッケージのバージョン: gnome-session-flashback 3.22.0-3
・'exec gnome-session --session=gnome-flashback' で起動できない。
(a) 対処方法
gnome-session の起動部分を下記のように変更する。
( cf. https://wiki.archlinuxjp.org/index.php/GNOME_Flashback )
(変更前) exec gnome-session --session=gnome-flashback (変更後) export XDG_CURRENT_DESKTOP=GNOME-Flashback:GNOME exec gnome-session --session=gnome-flashback-metacity
(b) gnome-session のバージョンの確認方法
・gnome-session --version: 出力なし
・/usr/lib/gnome-session/gnome-session-binary --version: 出力なし
・gnome-session-inhibit --version: バージョンを表示
3. 発生事象 (未対応)
(1) X アプリでノード名を付けて指定したディスプレイを開けない。
・パッケージのバージョン: xserver-xorg 1:7.7+19
・'Xt error: Can't open display' と出力される。
・'xhost +' を実行しても状況は変わらない。
・xauth を無効化しても状況は変わらない。
・':0' で指定した場合には開ける。
(例) % xterm -display localhost:0 xterm: Xt error: Can't open display: localhost:0
bashでの配列の使用 [Linux]
この過程で、スクリプトの可読性を良くするために配列(連想配列を含む)を使用した。
以下は、備忘録として、配列の使用に関して要点をまとめたものである。
1. 配列 (indexed array)
(1) 変数の宣言
通常の変数の場合と同じである。
・通常は変数の宣言は不要である。
・local により、関数内のローカル変数として宣言することが可能である。
(2) 値の設定
(a) 要素毎の設定
a_demo[0]=a a_demo[1]=b
(b) 全要素の設定
a_demo=(a b)
(補足)
・空の配列の作成: a_demo=()
・配列の宣言と要素の設定を同時にすることが可能である。
local a_demo=(a b)
(c) 配列要素の追加
a_demo+=(c)
(3) 値の参照
${#a_demo[*]} ... 要素数 ${a_demo[*]} ... 全要素 ${a_demo[n]} ... n 個目の要素
(補足)
* の代わりに @ を使用することも可能である。
両者の違いは、通常の変数参照時の "$*" と "$@" の違いと同様である。
2. 連想配列 (associative array、hash)
bash v4 で追加された機能である。
未対応のバージョンでは、エラーとなる。
(1) 変数の宣言
使用する前に、連想配列としての変数の宣言が必要である。
declare -A h_demo
(補足)
関数内で上記の変数宣言を行った場合には、当該関数内でのみ有効となる。
(関数内でのローカル変数となる。)
(2) 値の設定
(a) 要素毎の設定
h_demo[Jan]=1 h_demo[Feb]=2
(b) 全要素の設定
h_demo=([Jan]=1 [Feb]=2)
(補足)
・空の連想配列の作成: h_demo=()
・連想配列の宣言と要素の設定を同時にすることが可能である。
declare -A h_demo=([Jan]=1 [Feb]=2)
(3) 値の参照
${#h_demo[*]} ... 要素数 ${!h_demo[*]} ... 全要素(key) ${h_demo[*]} ... 全要素(value) ${h_demo[key]} ... 特定の要素(key に対応する value)
(補足)
* の代わりに @ を使用することも可能である。
両者の違いは、通常の変数参照時の "$*" と "$@" の違いと同様である。
xawtvのウィンドウサイズを変更すると画像が表示されなくなる [Debian]
xawtv 3.103-3+b1
linux-image-3.16.0-4-686-pae 3.16.39-1+deb8u2
1. 発生事象
Debian 8 において、xawtv のウィンドウサイズを変更すると画像が表示されなくなる。
・xawtv を再起動すると回復する。
・Debian 7 (linux-image-3.2.0-4-686-pae 3.2.86-1)では発生しない。
・xawtv 3.102-3 (Debian 7 のパッケージ)に変更しても状況は変わらない。
2. 原因
kernel 3.16.x 上で発生する xawtv のバグである。
(詳細は、備考を参照。)
3. 対処方法
下記の手順を実施する。
(1) 更新するパッケージの入手
ubuntu 16.10 の下記のパッケージをダウンロードする。
fontconfig-config_2.11.94-0ubuntu2_all.deb libfontconfig1_2.11.94-0ubuntu2_i386.deb pia_3.103-4_i386.deb scantv_3.103-4_i386.deb xawtv-plugins_3.103-4_i386.deb xawtv_3.103-4_i386.deb
(補足)
・Debian 8 用の更新パッケージはリリースされていない。
・Debian sid よりも ubuntu 16.10 の方が更新するパッケージの数が少ない。
・https://pkgs.org/ 等から当該パッケージをダウンロードする。
(2) パッケージの更新
# dpkg -i *.deb
(補足)
更新内容は、下記の通りである。
・fontconfig-config 2.11.0-6.3+deb8u1 => 2.11.94-0ubuntu2 ・libfontconfig1 2.11.0-6.3+deb8u1 => 2.11.94-0ubuntu2 ・pia 3.103-3+b1 => 3.103-4 ・scantv 3.103-3+b1 => 3.103-4 ・xawtv-plugins 3.103-3+b1 => 3.103-4 ・xawtv 3.103-3+b1 => 3.103-4