[chromebook] Crostini環境にWindowsファイル共有(smb)をマウントする

今入っているプロジェクトが、VPNでつないでファイルサーバ(Windows)にアクセスしてね〜、というルールだったので、めんどくせーなクラウドに置けよchromebookで作業できるように準備しました

素直にはsmbをマウントできなかった

素直なLinuxならcifs-utilesでsmbをマウントできます
参考 Ubuntu から Windows の共有フォルダをマウントして利用する

chromebookでもできるだろと思っていたら、kernel moduleがないよ的なエラー(詳細は失念)でできないと判明
どうしたものかと調べたら、Dropboxのときと同様、こちらもFUSEでマウントできる方法がありました

ほぼ元記事そのままになるけど、手順メモです

FUSEを使ってマウントする方法

まずはインストール

$ sudo apt install fuse smbnetfs

fuseグループを作って、ログインユーザをグループメンバーにする
(必要ないかもしれないけど元記事がやっているので同じように実行)

$ sudo groupadd fuse
$ sudo gpasswd -a "$USER" fuse

設定ファイルを作る
ここでは~/network以下にマウントする例なので、別の場所にマウントしたければこれを書き換えます
[user][password]のところはファイルサーバの認証ID/PWをいれてください

$ mkdir ~/.smb
$ cp /etc/smbnetfs.conf ~/.smb/
$ echo "auth [user] [password]" > ~/.smb/smbnetfs.auth
$ chmod 600 ~/.smb/smbnetfs.auth
$ mkdir ~/network
$ smbnetfs ~/network

これで例えば192.168.1.2というsmbサーバ上のhogehogeという共有ポイントにアクセスするのであれば、~/network/192.168.1.2/hogehoge でアクセスできる・・・そうです
自分の場合はこれだけではアクセスできなかった(あとから考えたら単にパスワード間違えてただけかもしれないけど)ので、さらに設定を追加しました

ここまでの流れでsmbnetfsでマウント実行していたときはアンマウントしておきます

$ fusermount -u ~/network

~/.smb/smbnetfs.host というファイルを作って(アクセス権は600が良いようです)内容を以下のようにします
※ 192.168.1.2がファイルサーバのアドレス、WORKGROUPがワークグループ名、hogehogeが共有ポイント名

host 192.168.1.2 WORKGROUP visible=true
link hogehoge 192.168.1.2/hogehoge

この状態でsmbnetfsでマウントやり直し

$ smbnetfs ~/network

これで~/network/hogehoge でアクセスできるようになりました!
(linkで設定したので~/network/192.168.1.2/hogehogeに加えて~/network/hogehogeにもマウントされています)

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

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

Dropbox

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

#!/usr/bin/expect

set PASSWORD "パスワード"
spawn env LANG=C /home/ユーザー/.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="XMODIFIERS=@im=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] hp chromebook x360 14を買いました

現在、hpの80周年記念だかなんかでchromebook x360 14のi5モデルが破格の55,000円で販売されています

税率8%の今月中は税込みで59,400円
さらに9月いっぱいはLINEショッピングでhpダイレクトのポイントが増額されていて、なんと10%のポイントバック
つまり、現状日本で最もハイスペックなchromebookであるこの1台が、税込みでも実質53,900円(59,400円 – 5,500ポイントバック)で買える…!

10/15に発表されるかも知れない新pixelbookを待つべきか・・・とも思ったけど、こんな好条件を逃すときっと後悔する!!

そうしてポチッたのが先週の話
注文から1週間程度でモノが届きました

第一印象はとにかく真っ白な天板が美しい!
キーボードにバックライトもついているし、5万円台で買ったノートにはとても見えない高級感があります

スペックを見たときは重さが1.6kgというのがどうしても気になっていたんですが、実際手にとってみると、さすがに軽いとは言えないものの、昔のPCの重さを考えたらまあまあ許容範囲でしょうか

SDカードスロットは、挿すと頭が少し出るタイプ
抜き差しはしやすい反面、持ち運びにはちょっぴり気になります
重さといい、SDカードの出っ張りといい、持ち運ぶというよりは半据え置きで使うのが想定されている使い方なのかも

いざ起動させて気になったのは、ファンの音
特別うるさいわけじゃないはずですが、個人的には最近ファンレスに慣れきってたので、ファンがあるってだけで音が気になりました

USB-Cポートは左右にあってどちらでも充電できますが、どうやら4Kで出力できるのは右側だけ。左側では2Kまでしか出力できない模様です
家では外部ディプレイにつないで使うつもりなのでポートの向きが制限されるのはちょっと残念

次は環境設定にやったことを投稿したいと思います

[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がマウントされています。