chromebook で開発環境の構築(Crostini と時々Crouton)
その③Tmux, ほかターミナルカスタマイズ
arakaki Linux, chromebook 2019-01-04 50 のコメント

はじめに

ターミナル上で操作するなら入れておきたいTmux。VPSにも入れておけば不意にSSH接続が切れても安心です。

今回はcrostini/croutonの両方で導入できたので、共通の手順として記しておきます。

また、chromebookならではのターミナルアプリの設定についてもご紹介します。

Tmux

Debianリポジトリからインストール

Debianの場合、現時点ではaptで最新のTmuxをインストールできます。ただしそのためには、stable-backports リポジトリを追加しておく必要があります。

Debian -- stretch の tmux パッケージに関する詳細

パッケージ: tmux (2.3-4)

Debian -- stretch-backports の tmux パッケージに関する詳細

パッケージ: tmux (2.8-2~bpo9+1 など)

公式(GitHub)では現在バージョン2.8なのでバックポートでは追いついてますね。

では早速インストールしていきましょう。

■ バックポートリポジトリをsources.listに追加。(直接編集した方が早そうですが…)

sudo bash -c "echo 'deb http://ftp.jp.debian.org/debian stretch-backports main contrib non-free' >> /etc/apt/sources.list "

参考

■ 更新 & インストール

sudo apt update && sudo apt install -t stretch-backports tmux

バックポートからインストールする場合には-tオプションで明示しなければなりません。

■ バージョン確認

$ tmux -V
tmux 2.8

最新です!

これで完了。簡単ですね。aptのありがたみを感じます。

バックポートは普段使わないと思うのでコメントアウトしててもいいでしょう。(直接編集した方がry)

sudo sed -ri 's/(^.*backport.*$)/# \1/' /etc/apt/sources.list

また使う時は

sudo sed -i '/backport/s/# //g' /etc/apt/sources.list

ソースからビルド

せっかくなのでGitHubのソースファイルからビルドしてみましょう。手順はREAD MEのまんまです。

$ sudo apt install libevent-dev libncurses5-dev make autoconf automake pkg-config git
$ git clone https://github.com/tmux/tmux.git
$ cd tmux
$ sh autogen.sh
$ ./configure && make

これで完了。後はEclipseの時のように/optにでもmvしてパスを通せばいいでしょう。

私は依存パッケージのインストール時にちょっと失敗した(以下詳述)のが嫌になって、一応動くことを確認した後に消しました。やっぱりaptは偉大なり。

失敗例(lib64ncurses5-dev)

Tmuxはlibevent 2.x.とncursesに依存しています。とREAD MEに書いてあります。上の手順でも最初に依存パッケージをインストールしていますが、実はlibncurses5-devの前にlib64ncurses5-devをインストールしたのでした。

するとインストール時にgccやx11パッケージを消したり、インストールが完了しなかったり、その後apt installしようにも謎のエラーが出たりと、しっちゃかめっちゃか。

■ その時のログ(/var/log/apt/history.log)がこちら

Start-Date: 2018-12-24  23:13:15
Commandline: apt install lib64ncurses5-dev
Requested-By: username (1000)
Install: linux-libc-dev:i386 (4.9.130-2, automatic), libc6-dev:i386 (2.24-11+deb9u3, automatic), libncurses5:i386 (6.0+20161126-1+deb9u2, automatic), libtinfo5:i386 (6.0+20161126-1+deb9u2, automatic), libncurses5
-dev:i386 (6.0+20161126-1+deb9u2, automatic), libtinfo-dev:i386 (6.0+20161126-1+deb9u2, automatic), libgpm2:i386 (1.20.4-6.2+b1, automatic), lib64ncurses5-dev:i386 (6.0+20161126-1+deb9u2), libc6-dev-amd64:i386 (2
.24-11+deb9u3, automatic)
Remove: libx32itm1:amd64 (6.3.0-18+deb9u1), libc6-dev-x32:amd64 (2.24-11+deb9u3), libx32quadmath0:amd64 (6.3.0-18+deb9u1), cpp-6:amd64 (6.3.0-18+deb9u1), cpp:amd64 (4:6.3.0-4), libx32gcc1:amd64 (1:6.3.0-18+deb9u1
), gcc:amd64 (4:6.3.0-4), libx32gcc-6-dev:amd64 (6.3.0-18+deb9u1), x11-session-utils:amd64 (7.7+2+b1), libx32cilkrts5:amd64 (6.3.0-18+deb9u1), libc6-x32:amd64 (2.24-11+deb9u3), libx32asan3:amd64 (6.3.0-18+deb9u1)
, gcc-6:amd64 (6.3.0-18+deb9u1), gcc-multilib:amd64 (4:6.3.0-4), xorg:amd64 (1:7.7+19), libx32ubsan0:amd64 (6.3.0-18+deb9u1), x11-xserver-utils:amd64 (7.7+7+b1), lib32gcc-6-dev:amd64 (6.3.0-18+deb9u1), libx32gomp
1:amd64 (6.3.0-18+deb9u1), libx32atomic1:amd64 (6.3.0-18+deb9u1), gcc-6-multilib:amd64 (6.3.0-18+deb9u1), libx32stdc++6:amd64 (6.3.0-18+deb9u1)
Error: Sub-process /usr/bin/dpkg returned an error code (1)
End-Date: 2018-12-24  23:13:20

■ ターミナルの様子がこちら

lib64ncurses5-dev:i386 : 依存: lib64c-dev:i386
E: 未解決の依存関係です。'apt --fix-broken install' を実行してみてください (または解法を明示してください)

言われたとおりsudo apt --fix-broken installをしても…

dpkg: アーカイブ /var/cache/apt/archives/libc6-dev-amd64_2.24-11+deb9u3_i386.deb の処理中にエラーが発生しました (--unpack):
 '/usr/include/bits' を上書きしようとしています。これはパッケージ libc6-dev-i386 2.24-11+deb9u3 にも存在します
処理中にエラーが発生しました:
 /var/cache/apt/archives/libc6-dev-amd64_2.24-11+deb9u3_i386.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

その後はaptコマンドで(search以外)何をしても上記エラー
apt search libc6してインストール済みの以下が悪いのかと思い、

libc6-dev-i386
libc6-i386
libc6-x32

sudo dpkg --purge libc6-dev-i386 libc6-i386 libc6-x32

で削除。改めてsudo apt --fix-broken installしたら直ってました。

で、原因を推測するにlib64ncurses5-devが依存しているlibc6-amd64が、既にインストールされていたlibc6-dev-i386などと競合してしまったのだと思います。(だとしたら既存のパッケージを削除したのはまずかったか…?)

付け加えるとこの現象が生じたのはcrouton上なので、本当にlib64ncurses5-devが危険なのか、それともcoroutonとの相性が悪かったのかは分かりません。(crostiniではlibc6-dev-i386などのパッケージはインストールされていませんでした。)

いまいちすっきりしないまま、今後のために記録だけ残しておきます。

設定 & 使い方

を簡単にまとめようと思い、しばらくman pageとにらめっこしてましたが諦めました。既に優れた記事が沢山あるのでそれらを参照するのがよいでしょう。最低限tmux lscm(サブコマンド一覧)とtmux lsk(キーバインド一覧)を覚えておけばなんとかなります。

設定ファイルについては達人に学ぶ.tmux.confの基本設定 - Qiitaが大変参考になりました。というかほぼパクリました、ありがとうございます!ただし、バージョンによって微妙に設定の仕方が変わったりするので、丸々コピペして動かないって時はやはりman pageを見る羽目になるでしょう。

例えば達人に学ぶ.tmux.confの基本設定 - Qiitaでの以下のような記述は、

# ウィンドウリストの色を設定する
setw -g window-status-fg cyan
setw -g window-status-bg default
setw -g window-status-attr dim
# アクティブなウィンドウを目立たせる
setw -g window-status-current-fg white
setw -g window-status-current-bg red
setw -g window-status-current-attr bright

このように書き換え可能です。(上のままでも動きます)

# ウィンドウリストの色を設定する
setw -g window-status-style fg=cyan,dim
# アクティブなウィンドウを目立たせる
setw -g window-status-current-style fg=white,bg=red,bright

また、上のような従前の記述で設定しても、tmux showw -gでは書き換え後のように最新の書式で表示されます。

【余談】Tmuxの新しいwindowやpaneはログインシェル

通常ターミナル内でbashを起動すると、それは現在のbashプロセスの子孫プロセス(非ログインシェル)になります。他方で、Tmuxでwindowやpaneを作成するとそれらは全てTmuxサーバープロセスの子プロセスとしてログインシェルとなります。

実際に見てみましょう。まずは普通にいくつかbashを起動してみます。

ここで一番上にある-bash(PID:538)がログインシェルで、その子孫は非ログインシェルです。

Man page of BASH

ログインシェル(login shell)とは、0 番目の引き数の最初の文字が - であるシェル、または --login オプション付きで起動されたシェルのことです。

次に、Tmuxでいくつかpaneを作成したときのpsコマンドの様子です。

全てのpaneが-bashのログインシェルですね。

ログインシェルの場合には、bashの設定ファイルのうち/etc/profileや~/.profileなどから読み込みます。ということは、Tmuxではwindowやpaneを新規作成する度に都度これらの読み込みを行うということなんですね。

まぁだからなんなのという話なんですが、これによってfcitxを起動する記述を少々変更しました。よろしければ合わせてご覧ください。

また、このようなTmuxの挙動は度々物議を醸すようで、以下のようなやり取りがありました。結論としては使い方次第(非ログインシェルに変更も可能)といったところだとなんでしょうが、個人的にはこのままでもいっかなって感じです。こまけぇこたぁ。

参考

ターミナルアプリの設定変更(Secure Shell App、Terminal)

さて、Tmuxを導入してターミナルがいい感じになったところで、次に芽生える衝動は「背景画像付けたい!」ですよね。ですよね!

他にもフォント変えたいとか、文字色・背景色変えたいとか、ショートカットキー変えたいとか色々出てくると思います。

それらは全て「プロファイル設定」画面で変更可能です。

croutonの実行環境

その前にまずはcroutonの実行環境をご紹介しましょう。Crosh Windowをお使いの方も多いかと思いますし、私も今まで使ってましたが、最近調子が悪かったのでcroshページのショートカットに変更しました。

ショートカットの作成方法

  • Ctrl + Alt + T でcroshページを開く
  • メニュー → その他のツール → ショートカットの作成
  • 追加されたアイコンで右クリック → 以下

ただまぁ、Crosh Windowにしろcroshページのショートカットにしろ、内側ではSecure Shell Appが動いているので以下の設定方法は同じです。

設定変更

早速設定変更していきましょう。croutonやcrostiniのターミナルがアクティブな状態でCtrl + Shift + Pを押すと「プロファイル設定」画面が表示されます。

特段説明は不要だと思いますが、cssで見た目を制御するのはさすがchromeOSって感じですね。

背景画像

background-image欄に記述します。私は画像を Google Photosにアップしといて画像URLとしました。ローカルファイルのパスを指定しても駄目っぽいですが、なにか方法があるんだろうか。以下自分用メモ。

■ crostini

linear-gradient(to bottom, hsla(360, 100%, 5%, 0.85) 0%, hsla(240, 100%, 5%, 0.85) 100%),url(https://...)

■ crouton

radial-gradient(circle at bottom right, transparent, hsla(0, 0%, 0%, 1) 300px),url(https://...)

既にcrostiniのターミナル画像が出ちゃってますが、ご存知の通り富嶽三十六景の赤富士です。浮世絵に限らず多くの絵画がPublic Dmainとして世界の美術館のサイトで公開されてたりします。

ショートカットの設定(英字キーボードのchromebookでターミナルフォーカス中に入力方法を切り替える)

だいぶニッチな需要だと思いますが、英字キーボードのchromebookの場合ctrl + spaceで英語⇔日本語の入力方法を切り替えます。ターミナル入力中はこのショートカットがデフォルトでは無効ですが、keybinds欄で設定できます。

{
"Ctrl-Shift-Space": "PASS",
"Ctrl-Space": "PASS"
}

参考

終わりに

今回はTmuxのインストールとターミナルアプリケーションの設定を中心にまとめました。本件とは直接関係ないですが、Tmuxの仕様をきっかけにfcitxを起動する記述を変更するにあたって、cronやsystemdについてより詳しく知ることができました。

デスクトップ環境があればターミナルエミュレータの選択肢は様々ありますが、初学者の私としてはデフォルトのターミナルでTmuxが使えたら十分です。その点においては、そもそもchromebookの完成度が高いといっても過言ではないのではないでしょうか。(マックやウィンドウズを触ってないので過言かも知れませんが…😅 今後もchromebookで頑張っていこうと思います。)

コメント

承認待ちのコメント 6 年, 3 ヶ月 前

承認待ちのコメント 6 年, 3 ヶ月 前

承認待ちのコメント 6 年, 2 ヶ月 前

承認待ちのコメント 6 年, 2 ヶ月 前

承認待ちのコメント 6 年, 2 ヶ月 前

承認待ちのコメント 6 年, 2 ヶ月 前

承認待ちのコメント 6 年, 2 ヶ月 前

承認待ちのコメント 6 年, 2 ヶ月 前

承認待ちのコメント 6 年, 2 ヶ月 前

承認待ちのコメント 6 年, 2 ヶ月 前

承認待ちのコメント 6 年, 1 ヶ月 前

承認待ちのコメント 5 年, 9 ヶ月 前

承認待ちのコメント 5 年, 9 ヶ月 前

承認待ちのコメント 5 年, 9 ヶ月 前

承認待ちのコメント 5 年, 9 ヶ月 前

承認待ちのコメント 5 年, 9 ヶ月 前

承認待ちのコメント 5 年, 9 ヶ月 前

承認待ちのコメント 5 年, 9 ヶ月 前

承認待ちのコメント 5 年, 9 ヶ月 前

承認待ちのコメント 5 年, 9 ヶ月 前

承認待ちのコメント 5 年, 9 ヶ月 前

承認待ちのコメント 5 年, 9 ヶ月 前

承認待ちのコメント 5 年, 9 ヶ月 前

承認待ちのコメント 5 年, 9 ヶ月 前

承認待ちのコメント 5 年, 9 ヶ月 前

承認待ちのコメント 5 年, 9 ヶ月 前

承認待ちのコメント 5 年, 9 ヶ月 前

承認待ちのコメント 5 年, 9 ヶ月 前

承認待ちのコメント 5 年, 8 ヶ月 前

承認待ちのコメント 5 年, 8 ヶ月 前

承認待ちのコメント 5 年, 4 ヶ月 前

承認待ちのコメント 5 年, 4 ヶ月 前

承認待ちのコメント 5 年, 4 ヶ月 前

承認待ちのコメント 5 年, 4 ヶ月 前

承認待ちのコメント 5 年, 4 ヶ月 前

承認待ちのコメント 5 年, 4 ヶ月 前

承認待ちのコメント 5 年, 4 ヶ月 前

承認待ちのコメント 5 年, 4 ヶ月 前

承認待ちのコメント 5 年, 4 ヶ月 前

承認待ちのコメント 3 年, 2 ヶ月 前

承認待ちのコメント 3 年, 2 ヶ月 前

承認待ちのコメント 3 年 前

承認待ちのコメント 3 年 前

承認待ちのコメント 2 年, 8 ヶ月 前

承認待ちのコメント 2 年, 6 ヶ月 前

承認待ちのコメント 2 年, 4 ヶ月 前

承認待ちのコメント 2 年, 3 ヶ月 前

承認待ちのコメント 1 年, 6 ヶ月 前

承認待ちのコメント 2 ヶ月, 1 週間 前

承認待ちのコメント 1 ヶ月, 1 週間 前

新しいコメント

必須

記入が必要です(公開はされません)

オプション

© 2018 あらがきじゃなくてあらかき
arakaki.tokyo