[chromebook] hp chromebook x360 14を開発に使えるようにいろいろ初期設定

先日購入したhp chromebook x360 14で開発作業ができるように行った設定(主にCrostini環境の整備)をまとめます。

Dropbox

基本的には先日書いた記事のまま
ただ、マウント時のパーミッションを自分だけが読み書きに変える – SSHの鍵を同期してるんだけど600になっていないと使えない – ためにexpectの内容を少し変更

#!/usr/bin/expect

set PASSWORD "n0r1k0db"
spawn env LANG=C /home/kazishii/.local/bin/dbxfs -o umask=077
expect {
    "keyring:" {
        send "${PASSWORD}\n"
    }
}
expect {
    "\\\$" {
        exit 0
    }
}

IME

日本語入力環境を整えます

$ sudo apt install fonts-noto
$ sudo apt fcitx fcitx-mozc fcitx-lib*

IMEの設定を起動します

$ fcitx-autostart
$ fcitx-configtool

設定内容はこちらを参考にしました
(参考先はC101PA=arm64用なのでx360 14=amd64に当てはめるには注意)

Mozcの追加

  1. 左下の方の+ボタンを押して表示されたポップアップの、Only Show Current Language のチェックボックスを外します。
  2. その次にSearch Input Methodをクリックして、mozcと入力します。
  3. 上に表示されたmozcをクリックして追加完了です。

フォント設定

  1. 画面上部のAppearanceタブを選択します。
  2. fontのところに表示されているフォント名をクリックします。(デフォルトに何が表示されているのかメモし忘れました。。)
  3. search font nameをクリックしてNoto Sans CJK JPと入力します。
  4. 表示されているNoto Sans CJP JP Regularを選択して完了。
  5. Menu fontの方でも同じように設定する。

毎回起動時にfcitx-autostartをするのは嫌なので自動起動を設定します
こちらを参考にさせていただきました

/etc/systemd/user/cros-garcon.service.d/cros-garcon-override.conf
に下記を追加

Environment="GTK_IM_MODULE=fcitx"
Environment="QT_IM_MODULE=fcitx"
Environment="[email protected]=fcitx"

~/.sommelierrc
にて起動時に呼び出し(ファイルがなければ新規作成)

/usr/bin/fcitx-autostart

Visual Studio Code

こちらを参考にさせていただきました
C101PAのときはarmだから第三者のパッケージを使っていましたが、x360 14だとMicrosoftからの公式を使えるのが嬉しい!

まずレポジトリを登録

$ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
$ sudo install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/
$ sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'

追加したレポジトリからパッケージリストをよみこんでインストール実行

$ sudo apt update
$ sudo apt install code

あとはcodeを立ち上げお好みで設定を変更すればVSCodeの準備も完了です
個人的には下記が大事だと思います

フォントの設定
日本語等幅フォント(ex: Noto Sans Mono CJK JP)を追加しないと日本語でカーソルがずれる
ショートカットの設定
そのままではIMEで使うctrl+spaceが競合しているので回避

[chromebook] Linux環境(Crostini)にDropboxをマウントする

最近自分の中で「最強の打ち合わせのお供」という評価をしているchromebook。
タブレット機らしい軽快さで、developer tool付きのデスクトップブラウザが使え、必要ならMS Office(android版)も使えて、さらにはLinuxまで載っているから各種コマンドまで使えちゃう。
なんて便利なコなんだろう!

愛機 ASUS Chromebook Flip C101PA

で、実用的に使うとなると、個人的にdropboxの使用は必須です。

chromebookでdropboxを使うにあたっては、WEBアプリを使ったり、androidアプリを使ったり、さらにはローカルストレージにように使えるFile System for Dropboxなんかを使ったりするのですが、どの方法もLinux環境(Crostini)では使用できません。
Crostiniにインストールしたエディタ(Visual Studio Codeを使っています)で編集したいときなど、dropboxにアクセスできないのは困ります。

Linux版の公式クライントを使えるのかもしれないですが、クラウド上のファイルをローカルにダウンロードされるのはストレージの少ないchromebookには非現実的。

そこでクラウドにファイルを置いたままファイルシステムにマウントできるdbxfsを使ってみました。

dbxfsのインストール

dbxfsはFUSE(Filesystem in Userspace)を使ってPythonで実装されています。そのインストールにはPythonのパッケージ管理システムのpipを使います。
ということで、それらが入っていなければインストール

$ sudo apt install fuse libfuse2 python3-pip

環境が整ったらdbxfs本体をインストール

$ pip3 install dbxfs

通常ならdbxfsは~/.local/binにインストールされるはず。
マウントポイント(この例では~/Dropbox)を作っておいてからdbxfsを起動します

$ mkdir ~/Dropbox
$ ~/.local/bin/dbxfs ~/Dropbox
We need an access token. Perform the following steps:
1. Go to https://www.dropbox.com/oauth2/authorize?response_type=code&client_id=********
2. Click "Allow" (you may have to log in first)
3. Copy the authorization code.
Enter authorization code (Ctrl-C to quit): 

こんなメッセージが帰ってくるので、表示されたURLにブラウザでアクセスして認証を済ませてコードをゲット。
そのコードを入力して次に進みます。

We're all connected. Do you want to save your credentials for future runs? [Y/n] 

認証情報を保存するかなのでここはY

Please enter password for encrypted keyring:

keyringのためのパスワードを聞かれます。ログインアカウントのパスワードを入力

Would you like to help us improve dbxfs by providing anonymous error reports? [Y/n] 
Do you want "/home/******/Dropbox" to be the default mount point? [Y/n]

改善のためにエラーレポートを送るか、なのでY(望まないならnでもいいはず)
指定したマウントポイントをデフォルトにするか、なのでY

以上で無事dropboxがマウントできました。
df -h で確認してみます

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vdb        6.8G  3.3G  3.2G  52% /
none            492K     0  492K   0% /dev
devtmpfs        1.4G     0  1.4G   0% /dev/tty
/dev/vdb        6.8G  3.3G  3.2G  52% /dev/wl0
tmpfs           100K     0  100K   0% /dev/lxd
run             1.4G   24K  1.4G   1% /dev/.host_ip
/dev/root       153M  150M  280K 100% /dev/.ssh/sshd_config
9p              1.9G  572K  1.9G   1% /mnt/chromeos
tmpfs           100K     0  100K   0% /dev/.lxd-mounts
tmpfs           1.4G     0  1.4G   0% /dev/shm
tmpfs           1.4G  8.2M  1.4G   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           1.4G     0  1.4G   0% /sys/fs/cgroup
tmpfs           273M   20K  273M   1% /run/user/1000
dbxfs           2.1T   44G  2.0T   3% /home/******/Dropbox

ちゃんと2TBのディスクとしてマウントされてる!

認証情報を保存してデフォルトのマウントポイントも決めていれば、次回以降は引数なしの dbxfs コマンドだけでマウントできます。
なおアンマウントは下記の通り

$ fusermount -u ~/Dropbox

linux環境起動時に自動でマウントしたい

上記で十分使えるようになったんですが、できればlinux環境起動時に自動でマウントしたい。
自動マウントをする上での問題はkeyringのパスワードを聞かれることなので、これをexpectで力技で回避してみました。

まずexpectが入っていなければインストール

$ sudo apt install expect

expectで自動マウント用スクリプトを書きます。dbxfsコマンドと同じ場所に置いてみました。
~/.local/bin/dbxfsmount.exp

#!/usr/bin/expect

set PASSWORD "パスワード"

spawn env LANG=C /home/******/.local/bin/dbxfs
expect {
    "keyring:" {
        send "${PASSWORD}\n"
    }
}

expect {
    "\\\$" {
        exit 0
    }
}

パスワードのところにログインパスワードを記入します。
共有サーバでもないんでスクリプトに平文で書くことをお許しを・・・
spawnの行にはdbxfsコマンドの場所を自分の環境に合わせて書いてください。
書けたら実行権限を与えておきます。

$ chmod 700 ~/.local/bin/dbxfsmount.exp

ここまで用意できたら起動時にこのスクリプトを実行するようにします。
.bash_profileを以下のようにしました(PATHの部分は環境に合わせて)

export PATH=$PATH:/home/*****/.local/bin
(dbxfsmount.exp > /dev/null 2>&1 &)

if [ -f ~/.bashrc ] ; then
. ~/.bashrc
fi

これでこれからはCrostiniを立ち上げると自動でdropboxがマウントされています。