6/23/2020

[note] ubuntu20.04LTS、へのUPGで失敗して上書き再インストール

する羽目になっていた時の作業メモ。

いや参りました。Snapへの移行はじめ、幾つか割と大きな変更があるという話だったのでここ数回と比較して危険度は高めかもしれない、と思ってはいたのですが、悪い予感程当たるというもので。

いつも通り、リリースから数週間待って、update managerからアップグレードを試みたのですが、あえなく失敗。原因は不明。コマンドラインのdo-release-upgradeに切り替えたのですが、こちらも同様に失敗。

しかも悪い事に、パッケージの取得からインストールまで進んだ上で、その途中で失敗したものだから、システムの設定的には20.04LTSにアップグレードされた事になっていて、しかし各々のパッケージは中途半端に一部がインストールor置換されていない状態になってしまったのです。ここ数年特に問題が起きていなかった事に油断して、重要なデータ以外のシステムのフルバックアップを取っていなかったのもいけませんでした。

失敗したと言っても、カーネルや主要なライブラリ、またアプリは確認した限り新バージョンに置き換わっており、動作自体はするし、別にクラッシュしたりはしない・・・のですが、ログイン画面の背景のスケーリングがおかしかったり、ウィンドウの陰影等の装飾設定が変更出来なかったり、色々とちぐはぐというか、細かい調整がされていない感じです。それでいて、何が欠けていて、何が余計なのか、その調査判別は極めて困難という。

大部分はそれでも使用に難があるという程でもなかったのですが、受け入れ難い点もありました。最も致命的だったのは、日本語入力の不具合です。具体的には、fcitxとibusのいずれを使った場合にも、firefox等のmozilla製アプリやlxterminal等の一部ターミナルでIMEが起動せず、日本語入力が出来ないのです。

ウィンドウマネージャと各種IMの環境変数等設定を色々と変更して試してみた結果(抜粋)は概ね以下の通り。

1. 入力可
 chromium-browser, qterminal, emacs-gui等

2. WMや設定の組み合わせによっては不可な場合あり
 libreoffice

3. どの設定でも入力不可
 firefox, thunderbird, lxterminal(xterm)

この結果を見るに、ベースにしたツールキットの違いが原因と疑われる感じでしょうか。mozillaはマルチプラットフォームのために独自のツールキット(gtk+ベース?)を使っている筈ですし、おそらくは現環境(LXQt)のIM周り含むメッセージ処理についてブリッジのようなモジュールが必要で、それがアップグレードの失敗によって入っていない、とかそんなところかと。確認は困難ですが。。。qterminalはokでlxterminalがxなあたり、LXQtとgtk+の差な疑いが濃厚です。

他にも、LXQtでの標準ランチャー(lxqt-runner)を使ってみたところ、テキストボックスがポップする際、それにフォーカスが移らなかったり。都度ウィンドウを選択しなければならないのは如何にも手間でした。修正云々以前に、何故そんな事が起こるのか、謎です。

結局のところ、アップグレードの失敗によるだろう不整合点が多すぎて、手動でちまちま調べて修正するのはあまりに手間がかかる事は確実と思われる状態なわけで、流石にその路線は諦めざるを得ませんでした。同じような状況に陥った人は殆どいないようで、前例もほぼありませんでしたしね。

というわけで、初の上書き修復インストールで直す方針に切り替えました。まずドライブのパックアップを取り、インストール作業開始。

なお、最初はlubuntu(20.04LTS)のisoイメージを使ったんですが、これは途中(update-initramfs)でライブラリが足りない旨のエラーが出て、その修正も上手く行かなかったので、結局標準のUbuntu(20.04LTS)のisoイメージを使用しています。

基本は通常のインストール手順と同じ。上書きインストールの場合に異なる点は只一つ、インストール先のパーティションの設定の際、自動で設定や初期化等を行わず、手動(その他)での設定を選択し、かつ目的のパーティション(従来のルート)について、マウントポイントを'/'(ルート)に設定する事、です。また、マウントポイント設定の際、内容を保持する旨にチェックが入っている事を確認します。ここで内容を初期化する方(フォーマット等)にチェックが入っていたりすると全てが消え去り、バックアップの復元からやり直しになるので重ねて要注意。

後は通常のインストールと同じで、原則自動でインストールが進みます。 ただ、私の場合は、一点だけエラーが発生しました。具体的にはインストールのほぼ最終段、[以前インストールされたパッケージを復元しています...]の段で、復元に失敗したのです。その際のエラーメッセージは下記の通り。

<エラーメッセージ>
 インストールされていたアプリケーションの復元処理でエラーが発生しました。インストール は続行されますが、インストールが完了して再起動した後で、あらためてアプリケーションを 手動で再インストールする必要があります。

少し肝を冷やしましたが、致命的なものではなかったらしく、インストール自体は続行し、終了しました。後から確認した限りでは、確かにアプリケーションやライブラリが欠けていましたが、クリーンインストールの際と同様に追加すれば不足を感じる事はありませんでしたので、おそらくはもう使用していない類のサードパーティのリポジトリに関連するものが引っかかっただけだろうと思われます。

日本語入力等も可能に。firefox等でも日本語入力が出来ます。一安心。ランチャー(lxqt-runner)も呼び出し時にテキストボックスにフォーカスが移ります。

ただ、デフォルトの状態では気になった点は幾つかあります。qterminalのフォントが全角だったり、fcitxを入れる前にlubuntu-desktopを追加したところ、標準のibusだと何か問題があるのか、一旦日本語入力が出来なくなって、言語サポートも初期状態になっていたり。フォントは設定を変更すれば元通りになりましたし、日本語入力も新規インストールの場合と同様、常用しているfcitx-mozcを入れて設定すれば元通りになりましたが、若干不安を覚える点も無きにしもあらず、といったところでした。

また、ある意味当然ですが、/home以外のフォルダは全て初期化されます。/usr以下や/var以下を独自にカスタマイズして、そこに色々置いている人は多いでしょうけれども、それも一旦消えるので、それらを別途バックアップから復元しなくてはなりません。

やはり、アップグレードが正常に行われるに越したことはない、という事です。正直上書きインストールは二度としたくありませんね。ともあれ、何とか修正出来ただけよし、とすべきでしょうか。やれやれです。

6/22/2020

[note] linuxにてデフォルトの再生デバイスの変更

をしたので、久しぶりにメモ。

事の始まり、という程大層な話でもありませんが、作業用のPC(ubuntu)について、USB接続のヘッドセットを繋いで使う事が増えまして。その一方、ヘッドセット(のヘッドホン部分)は一般にあまり音質は良くないもので、音楽等の音質を気にするような場合には向いていないため、そのような場合には従来の通りマザーボードの方の音声出力に別のヘッドホンを繋いで使用していたのですね。

そうすると、当然ながら再生デバイスが複数併存する事になって、用途に応じた切り替えが都度必要になるわけです。しかるにubuntuだと、pulseaudioのコントロールパネルから選択する方法がデフォルトで用意されています。時々使う程度なら、その都度パネルを開いて選択、という方法でも良かったのですが、ここで問題が生じました。WEBブラウザで動画を再生する場合等には、一時停止も含め、音声出力が途切れる際にその設定がリセットされ、デフォルトに戻ってしまうのです。デフォルトでない方を使っていると、再開やシーク、別動画の再生等、頻繁に行う操作の度にパネルから選択しなおさないといけないわけですね。

流石にこれは面倒だ、というわけで、デフォルトのデバイスを切り替える事にしました。しかしpulseaudioのパネルにはそれを行う項目がありません。色々調べてみても、結局のところ設定ファイルを書き換える(もしくはコマンドを実行する)しかないようです。というわけで、その方法を以下にメモ。なお、OSはubuntu20.04LTSです。

まず、デバイスのIDを取得します。下記コマンド。

$ pacmd list-sinks |grep -e 'name:' -e 'index:'

すると例えば下記のようなデバイスのリストが表示されます。

   * index: 1
        name: <alsa_output .usb-c-media_electronics_inc._usb_pnp_sound_device-00.analog-stereo>
    index: 2
        name: <alsa_output .pci-0000_08_00.1.hdmi-stereo>
    index: 3
        name: <alsa_output .pci-0000_08_00.6.analog-stereo>

これは私のPCの場合の出力ですが、今回デフォルトに選択したいのはindex: 3のデバイスです。ちなみにindex: 1はヘッドセット、index: 2はモニタの音声出力ですね。合計3種ある、という事です。変更前はindex: 1のヘッドセットがデフォルトになっていました。初期状態だと、番号順の先頭がデフォルトに設定される、という事でしょうか?

ともあれ。デフォルトのデバイスを切り替えるコマンドは下記の通り。

$ set-default-sink 'alsa_output.pci-0000_08_00.6.analog-stereo'

・・・なのですが、これをターミナルから実行しても、既に開いているアプリには反映されません。(反映されるタイミングについては未調査につき省略)

仕方がないので、今の所私は、設定ファイルに書き込み、一旦ログオフして再ログインする手順を踏んでいます。面倒ですが、そんなに頻繁にデフォルトを切り替える必要があるわけでもないので、とりあえずはいいか、という事で。設定ファイルは下記。

<設定ファイル>
 /etc/pulse/default.pa

このファイルのどこか(最下部にそれ用らしいエリアがあるのでそこでよい)に、上記コマンドを書き込みます。

しかる後に、一旦ログオフして再ログイン。これでデフォルトのデバイスが切り替わり、煩わしい選択作業から開放された、というわけです。やれやれ。