月別アーカイブ: 2018年1月

Termux with Xperia Z4 Tablet + BKB50 + Syncthing

最近使わなくなってきた Xperia Z4 タブレットに、下記の環境を整備して延命する。

  • emacs25
  • markdown と org-mode ファイルを、出先で編集する
  • gitやファイル共有で、他のPCとのファイルの同期をとる

Termuxのインストール

何で今まで知らなかったのか、こんな凄いものを見付けた。

Termuxは、Androidで動く端末(ターミナル)とLinux環境を、非root環境で動かすというもの。

Linux環境にはパッケージマネジメント apt も含まれていて、主だったパッケージは既に用意されているところが素晴しい。

2015年末から開発が始まっていて、この原稿の時点では v0.59 。

2017年ごろから、紹介記事が増えていたようだ。

Termuxの使い方

ターミナル内は、bashそのもの。

標準では表示できる画面は一つだけだが、複数セッションも起動できる。

アプリとしてのTermux自体は、以下の様な操作が出来る。 フォントサイズをピンチ操作で変更できるのは、とても有り難い。

  • タッチ操作でスクロール
  • 長押しでコンテキストメニューが出て、コピーペーストなどが可能
    • Selecting and pasting text.
    • Sharing text from the terminal to other apps (e.g. email or SMS)
    • Resetting the terminal if it gets stuck.
    • Switching the terminal to full-screen.
    • Hangup (exiting the current terminal session).
    • Styling the terminal by selecting a font and a color scheme.
    • Showing this help page.
  • ピンチで拡大・縮小が可能 (Terminalなのに!)
  • 左側からスワイプするとメニューが出て、KEYBOARDとNEW SESSIONの操作が可能
    • 長押しでSESIONのタイトル編集が可能
  • キーボードショートカット
    • Ctrl+Alt + C → Create new session
    • Ctrl+Alt + R → Rename current session
    • Ctrl+Alt + Down arrow (or N) → Next session
    • Ctrl+Alt + Up arrow (or P) → Previous session
    • Ctrl+Alt + Right arrow → Open drawer
    • Ctrl+Alt + Left arrow → Close drawer
    • Ctrl+Alt + F → Toggle full screen
    • Ctrl+Alt + M → Show menu
    • Ctrl+Alt + U → Select URL
    • Ctrl+Alt + V → Paste
    • Ctrl+Alt + +/- → Adjust text size
    • Ctrl+Alt + 1-9 → Go to numbered session

詳細は

キーボードのCapsとCtrlの入れ替え&特殊記号の入力

Google Playからインストールすれば、特にAndoroid本体の設定を加える必要もなく、アイコンから起動してあっさり普通に使用できる。 ただし、AndroidのソフトキーボードはIMEを前提に作られていて直接入力に向かないし、Ctrlキーなどの装飾キーも使い難い。

実用的には、外付けの物理キーボードが必須だ。

今回は、Xperia Z4 Tablet 用のBluetoothキーボード BKB50を使用する。

更に、レイアウトを設定する下記のアプリを使ってCapsとCtrlを入れ替える。これで快適に操作できる。

アプリのページには、下記の様な但し書きがあり、保証外の様子。

Bluetooth接続のキーボードでは未検証です。 恐らく他の(ATOK以外の))IMEでは正常に動作しません。 確認した限りGoogle日本語入力・Simeji・iWnnでは正常に動作しませんでした。

今回は、Androidの日本語入力は使用せず(SKKを使う)、CapsとCtrlの入れ替えだけが目的なので、問題ない。

残念ながら、BKB50では"|"が入力できないのだけれど、 Termuxの機能で補うことが出来る。

左からのスワイプのメニューから、KEYBOARDを選択すると、画面下に記号一覧が出るので、ここから入力することにする。

emacs + git + python のインストール

2018.01.05時点でのバージョンは。

  • python 3.6.4 (標準が python3)
  • emacs 25.3.1
  • git 2.15.1

これだけあれば、使い道はかなりありそうだ。

caskでemacs環境を再構築

emacsの環境をgitとcaskで管理しているので、Termuxでも使用する。

cask install がパッケージをダウンロードする時に失敗することが多いものの、 installを何度か繰り返すと、全てのパッケージのインストールを完了出来た。

Androidのストレージをリンク (不採用)

で、 $HOME/storage に、下記のストレージへのリンクが作られる。

  • ~/storage/shared
  • ~/storage/downloads
  • ~/storage/dcim
  • ~/storage/pictures
  • ~/storage/music
  • ~/storage/movies
  • ~/storage/external

Dropboxでファイル同期 (不採用)

AndroidでDropboxのオフライン機能を使っていれば、下記のフォルダからアクセスできる。

  • ~storage/shared/Android/data/com.dropbox.android/files/hogehoge/foo/bar

ただし、Forumの記事 Got Dropbox to work with Termux!!! によると、全自動で同期とは行かず、いくつかのお作法がある。

  • Termuxでファイルを開く前後で、Dropboxを手動で同期(update/sync)する必要がある
  • ファイルを新規作成する場合は、Dropboxで作成し、予めオフラインファイルとしておく必要がある

You will need to go into Dropbox and manually update/sync the files before and after you open them in Termux. I also discovered if you want to create a new file you will need to use Dropbox to create it and set it as an offline file before you open it to edit in Termux if you want Dropbox to sync it.

普段使いには、やや面倒。

とは言え、gitで管理する程でもない個別のファイルはDropboxの様な方法が便利。

代りに、Syncthingを使って自宅のMac上のファイルと同期がとれる様にする。

Syncthingでファイル同期: Macの設定

Macには、homebrewからインストールする。

アプリケーションから syncthing-bar を実行すると、 Syncthingが常駐する。 タスクバーの syncthing-bar から [http://127.0.0.1:8084/](OpenUI) を選択して設定画面を出して、必要な情報を確認しておく。

  • デバイスID: 設定画面のメニューから IDを表示 を選ぶ
  • 共有フォルダー: 設定画面の フォルダーを追加 で設定する

Syncthingでファイル同期: Termuxの設定

Termuxで使うので、Google Playのアプリ版ではなく、 apt からCUIでインストールする。

常に使う予定はないので、サービスの設定はしない。 必要な時に、裏のTermuxターミナルで syncthing を実行する。

標準では 127.0.0.1:57562 で、Macと時と同じ設定画面が表示されるので、Mac同様に共有したい設定を加える。

  • デバイスID: 起動メッセージの中に "MY ID"(デバイスID)という行
  • (共有フォルダー: 設定画面の フォルダーを追加 で設定する) ☆必要なら

Syncthingでファイル同期: 接続テスト

最初の接続がやや煩雑。 MacとTermuxの設定画面に、それぞれからの接続確認メッセージが出るので、適宜許可を出せば同期が始まる。 その際、(多分無関係な)"近くにあるデバイス"も同時に表示されるので、自分のデバイスIDとフォルダIDに間違いないか確認する。

一度同期が始まれば、Dropboxに近い感覚でファイルが同期される。

少し意地悪なテストをしてみた結果は、以下の通り。

  • 編集がコンフリクトした場合は、ファイルが複数に分かれる (Dropboxと同じ動作)
  • ファイル編集時には、他のデバイス上のファイルがロックされるが、タイムラグがやや大きい
  • そのタイムラグの間に複数の編集を加えると、どちらかの編集が消えることがある

この様な動作なので、複数人で同時にアクセスする様な使い方には向いていないが、一人で作業する分には問題にならない程度だろう。

gitを使ったプロジェクト同期のテスト

自分のリポジトリからcloneして、commit出来ることを確認した。 これなら、ちょとしたコーディングには十分使える。

ドキュメント作成するには、ややSKKの反応が遅いのが気になる。 入力は出来ているのだが、表示の遅延が大きくて、ややとまどう。

emacsの補間系のパッケージを減らすと改善するかも知れない。 おいおい試してみる。

まとめ

  • Termuxを使えば、Androidタブレットで簡易版ではない本物emacsが割と実用的に動作する
  • しかも、emacsに限らず通常使いそうなパッケージを簡単に追加することができる
  • 実際に、gitとSyncthingを使ったプロジェクト・ファイル同期の環境を作り、動作を確認した
  • 物理キーボードにない特殊記号は、termuxのソフトキーボードで解決できる

Macbook Proを持ち運ぶ機会が少し減るかも知れないくらいの完成度だ。