Chinachu + recfsusb2n で "can't send urb: No such file or directory" になってコケる問題
前回記事で LIVA に Chinachu を入れてみたところ、LIVA の起動直後はうまく動いていたが、しばらくすると EGP 取得や録画ができなくなった。Chinachu scheduler のログ(chinachu/log/scheduler)を見てみると、EPG 取得の途中で「recfsusb2n: can't send urb: No such file or directory」というエラーが現れている。
8 Jun 19:35:20 - [4] {"type":"GR","channel":"22","n":4} 8 Jun 19:35:20 - [4] LOCK: FSUSB2 (n=0) 8 Jun 19:35:20 - [4] SPAWN: recfsusb2n -b 22 - - (pid=20909) 8 Jun 19:35:20 - [4] STREAM: /tmp/chinachu-tmp-hw67srds.m2ts 8 Jun 19:35:20 - STATUS: { completed: 6, waiting: 5, worked: 5, running: 1 } 8 Jun 19:35:20 - [4] #recfsusb2n: recfsusb2n ver. 0.9.2 ISDB-T DTV Tuner FSUSB2N device: "/dev/bus/usb/001/005" 8 Jun 19:35:20 - STATUS: { completed: 6, waiting: 4, worked: 5, running: 1 } 8 Jun 19:35:20 - [4] #recfsusb2n: pid = 20909 8 Jun 19:35:21 - [4] #recfsusb2n: B25Decoder initialized. 8 Jun 19:36:20 - [4] UNLOCK: FSUSB2 (n=0) 8 Jun 19:36:20 - [4] EXEC: epgdump (pid=20972) 8 Jun 19:36:21 - UNLINK: /tmp/chinachu-tmp-hw67srds.m2ts 8 Jun 19:36:21 - [4] CHANNEL: GR-22 ... GR_1048 (sid=1048) (programs=214) - TBS1 8 Jun 19:36:21 - [4] CHANNEL: GR-22 ... GR_1049 (sid=1049) (programs=0) - TBS2 8 Jun 19:36:21 - [4] -- (ok) 8 Jun 19:36:22 - [5] {"type":"GR","channel":"23","n":5} 8 Jun 19:36:22 - [5] LOCK: FSUSB2 (n=0) 8 Jun 19:36:22 - [5] SPAWN: recfsusb2n -b 23 - - (pid=20974) 8 Jun 19:36:22 - [5] STREAM: /tmp/chinachu-tmp-hw67u2uw.m2ts 8 Jun 19:36:22 - STATUS: { completed: 7, waiting: 4, worked: 6, running: 1 } 8 Jun 19:36:22 - [5] #recfsusb2n: recfsusb2n ver. 0.9.2 ISDB-T DTV Tuner FSUSB2N device: "/dev/bus/usb/001/005" 8 Jun 19:36:22 - STATUS: { completed: 7, waiting: 3, worked: 6, running: 1 } 8 Jun 19:36:22 - [5] #recfsusb2n: pid = 20974 8 Jun 19:36:22 - [5] #recfsusb2n: B25Decoder initialized. 8 Jun 19:36:29 - [5] #recfsusb2n: recfsusb2n: can't send urb: No such file or directory 8 Jun 19:36:34 - [5] UNLOCK: FSUSB2 (n=0) 8 Jun 19:36:34 - [5] EXEC: epgdump (pid=20996) 8 Jun 19:36:34 - UNLINK: /tmp/chinachu-tmp-hw67u2uw.m2ts 8 Jun 19:36:34 - [5] EPG: データが空 (result.tv.channel is undefined) 8 Jun 19:36:34 - [5] -- (retrying, residue=2) 8 Jun 19:36:37 - [5] {"type":"GR","channel":"23","n":5} 8 Jun 19:36:37 - [5] LOCK: FSUSB2 (n=0) 8 Jun 19:36:37 - [5] SPAWN: recfsusb2n -b 23 - - (pid=20998) 8 Jun 19:36:37 - [5] STREAM: /tmp/chinachu-tmp-hw67uefr.m2ts 8 Jun 19:36:37 - [5] #recfsusb2n: recfsusb2n ver. 0.9.2 ISDB-T DTV Tuner FSUSB2N 8 Jun 19:36:37 - [5] #recfsusb2n: device: "/dev 8 Jun 19:36:37 - [5] #recfsusb2n: /bus/usb/001/005" 8 Jun 19:36:37 - [5] #recfsusb2n: pid = 20998 8 Jun 19:36:37 - [5] #recfsusb2n: B25Decoder initialized. 8 Jun 19:36:44 - [5] #recfsusb2n: recfsusb2n: can't send urb: No such file or directory 8 Jun 19:36:49 - [5] UNLOCK: FSUSB2 (n=0) 8 Jun 19:36:49 - [5] EXEC: epgdump (pid=21014) 8 Jun 19:36:49 - UNLINK: /tmp/chinachu-tmp-hw67uefr.m2ts 8 Jun 19:36:49 - [5] EPG: データが空 (result.tv.channel is undefined) 8 Jun 19:36:49 - [5] -- (retrying, residue=1) 8 Jun 19:36:52 - [5] {"type":"GR","channel":"23","n":5} 8 Jun 19:36:52 - [5] LOCK: FSUSB2 (n=0) 8 Jun 19:36:52 - [5] SPAWN: recfsusb2n -b 23 - - (pid=21016) 8 Jun 19:36:52 - [5] STREAM: /tmp/chinachu-tmp-hw67uq28.m2ts 8 Jun 19:36:52 - [5] #recfsusb2n: recfsusb2n ver. 0.9.2 ISDB-T DTV Tuner FSUSB2N 8 Jun 19:36:52 - [5] #recfsusb2n: device: "/dev/bus/usb/001/005" 8 Jun 19:36:52 - [5] #recfsusb2n: pid = 21016 8 Jun 19:36:52 - [5] #recfsusb2n: B25Decoder initialized. 8 Jun 19:36:59 - [5] #recfsusb2n: recfsusb2n: can't send urb: No such file or directory 8 Jun 19:37:04 - [5] UNLOCK: FSUSB2 (n=0) 8 Jun 19:37:04 - [5] EXEC: epgdump (pid=21033) 8 Jun 19:37:04 - UNLINK: /tmp/chinachu-tmp-hw67uq28.m2ts 8 Jun 19:37:04 - [5] EPG: データが空 (result.tv.channel is undefined) 8 Jun 19:37:04 - [5] -- (give up)
これ以降は、EPG 取得をしても録画をしても(さらに手動で recfdusb2n を起動しても)、同じエラーが出て失敗してしまう。マシンを再起動すれば一旦は直るが、いずれにせよ scheduler を実行しているうちに同じエラーになり、動かなくなる。
Chinachu の問題なのか recfsusb2n の問題なのか、あるいは KTV-FSUSB2 の問題なのか LIVA の問題なのか、いろいろ調べても知識不足でさっぱりわからなかったが、最終的には、chinachu/app-scheduler.js の SIGKILL を SIGTERM に変更したら良さげな感じ。
diff --git a/app-scheduler.js b/app-scheduler.js index 59d77be..38843cf 100644 --- a/app-scheduler.js +++ b/app-scheduler.js @@ -935,7 +935,7 @@ function getEpg() { // プロセスタイムアウト execRecCmd(function() { - recProc.kill('SIGKILL'); + recProc.kill('SIGTERM'); }, 1000 * (config.schedulerEpgRecordTime || 60), '[' + i + '] KILLWAIT'); // キャンセル時 @@ -943,7 +943,7 @@ function getEpg() { var onCancel = function () { isCancelled = true; - recProc.kill('SIGKILL'); + recProc.kill('SIGTERM'); }; removeListeners = function () {
とりあえず、しばらくこれで様子を見てみたい。
KEIAN USB地デジ&ワンセグチューナー KTV-FSUSB2/V3
- 出版社/メーカー: KEIAN
- メディア: Personal Computers
- 購入: 2人 クリック: 9回
- この商品を含むブログを見る
LIVA に Chinachu を導入して録画サーバーにする
今までは、鼻毛鯖に epgrec を入れて録画サーバーにしていた。先日、超小型の低価格 PC である ECS LIVA を買ったので、以前から気になっていた録画予約システム Chinachu を入れてみる。環境は以下のとおり。
マシン | ECS LIVA-B3-2G-32G |
OS | Ubuntu 14.04 Desktop 日本語Remix 64bit |
チューナー | 恵安 KTV-FSUSB2 |
録画コマンド | recfsusb2n for linux v0.9.2(パッチ適用済み) |
recfsusb2n の導入については前回の記事を参照。
KEIAN USB地デジ&ワンセグチューナー KTV-FSUSB2/V3
- 出版社/メーカー: KEIAN
- メディア: Personal Computers
- 購入: 2人 クリック: 9回
- この商品を含むブログを見る
Chinachu のインストール
以下、公式ドキュメントの指示に従ってインストールしていく。
依存パッケージのインストール
$ sudo apt-get install build-essential curl git-core libssl-dev yasm libtool autoconf libboost-all-dev
Chinachu 本体のインストール
GitHub 上のリポジトリをクローンし、インストーラを実行する。
$ git clone git://github.com/kanreisa/Chinachu.git ~/chinachu $ cd ~/chinachu/ $ ./chinachu installer Chinachu Installer Menu: [!] These are installed under all /home/*****/chinachu/... [!] Recommend the Auto installation. 1) Auto (full) 5) Node.js Modules 9) libfdk-aac 2) Auto (fast) 6) epgdump 10) libogg 3) submodule 7) libx264 11) libvorbis 4) Node.js Environment 8) libvpx 12) libav what do you install? > 1
1 の Auto (full) を選べば、必要なものをすべて自動でインストールしてくれる。いろいろコンパイルするので、LIVA では10分強かかった。
設定
設定ファイル config.json の編集
設定ファイルのサンプル config.sample.json が chinachu のルート直下にあるので、これをコピーして使う。
$ cp config.sample.json config.json
config.json の内容は以下のようにした。
{ "recordedDir" : "./recorded/", "temporaryDir": "/tmp/", "wuiUsers": [ "akari:bakuhatsu" ], "wuiPort" : 10772, "wuiHost" : "::", "wuiTlsKeyPath" : null, "wuiTlsCertPath" : null, "wuiOpenServer" : false, "wuiOpenPort" : 20772, "wuiPreviewer" : true, "wuiStreamer" : true, "wuiFiler" : true, "wuiConfigurator": true, "recordedFormat": "<date:yymmdd-HHMM>_<type><channel>_<title>.m2ts", "tuners": [ { "name" : "FSUSB2", "isScrambling": false, "types" : [ "GR" ], "command" : "recfsusb2n -b <channel> - -" } ], "channels": [ { "type": "GR", "channel": "27" }, { "type": "GR", "channel": "26" }, { "type": "GR", "channel": "25" }, { "type": "GR", "channel": "24" }, { "type": "GR", "channel": "22" }, { "type": "GR", "channel": "23" }, { "type": "GR", "channel": "21" }, { "type": "GR", "channel": "20" }, { "type": "GR", "channel": "28" } ] }
サンプルには tuners に PT3 の設定も入っているが、今回は FSUSB2 だけなので消しておく。channels には、受信したい物理チャンネルを列挙する。
Chinachu の番組表におけるチャンネルの並び順は、この channels に書かれた順序になる。
なお、valid な JSON になっていないと、Chinachu を動かしたときにエラーが出る。コメントや末尾のカンマは許容されないので注意。
空の録画予約ルールの作成
$ echo "[]" > rules.json
動作チェック
Web UI の動作確認
$ ./chinachu service wui execute
ブラウザで http://localhost:10772/ が開けるか確認。config.json の wuiUsers で指定したユーザー名/パスワード(初期設定では akari/bakuhatsu)を入力して中に入る。
この段階ではまだ EPG のデータを取得していないので、番組表は表示されない。WUI がちゃんと起動できていたら Ctrl+\ で終了させる。
EPG の取得テスト
EPG(番組表のデータ)を取得してみる。1チャンネルにつき1分程度要した。
$ ./chinachu update -f
なお、最初は下のようなエラーが出たが、これは config.json の command にタイポがあった(recfsusb2n が .recfsusb2n になっていた)というだけだった。
8 Jun 00:44:50 - GETTING EPG. 8 Jun 00:44:50 - [0] {"type":"GR","channel":"20","n":0} 8 Jun 00:44:50 - [0] LOCK: FSUSB2 (n=0) 8 Jun 00:44:50 - [0] SPAWN: .recfsusb2n -b 27 - - (pid=22521) 8 Jun 00:44:50 - [0] STREAM: /tmp/chinachu-tmp-hw53ex34.m2ts 8 Jun 00:44:50 - STATUS: { completed: 0, waiting: 9, worked: 1, running: 1 } events.js:72 throw er; // Unhandled 'error' event ^ Error: spawn ENOENT at errnoException (child_process.js:988:11) at Process.ChildProcess._handle.onexit (child_process.js:779:34)
サービスの登録
Chinachu のサービス(chinachu-operator と chinachu-wui)が自動的に起動するよう、システムに登録する。
まず、起動スクリプトを /etc/init.d/ に追加する。
$ ./chinachu service operator initscript > /tmp/chinachu-operator $ ./chinachu service wui initscript > /tmp/chinachu-wui $ sudo chown root:root /tmp/chinachu-operator /tmp/chinachu-wui $ sudo chmod +x /tmp/chinachu-operator /tmp/chinachu-wui $ sudo mv /tmp/chinachu-operator /tmp/chinachu-wui /etc/init.d/
次に、insserv でサービスを登録する。ただし、Ubuntu のデフォルトの状態では、
$ sudo insserv chinachu-operator sudo: insserv: command not found
となって使えない。insserv は /usr/lib/insserv/ に入っているので、シンボリックリンクを張ってから実行する。
$ sudo ln -s /usr/lib/insserv/insserv /sbin/insserv $ sudo insserv chinachu-operator $ sudo insserv chinachu-wui
サービスの開始
$ sudo service chinachu-operator start $ sudo service chinachu-wui start
これで Chinachu が起動する。先ほどと同様、http://localhost:10772/ にアクセスすれば WUI が動いているはず。
Chinachu のログは chinachu/log/ 以下に保存されるので、うまく動いていない場合にはこれを参照する。WUI の ダッシュボード > ログ からでも閲覧可能(しかも自動的に表示を更新してくれる)。
なお、最初は(chinachu/log/operator に)以下のようなエラーが出て、うまく録画できなかった。
uncaughtException: Error: spawn ENOENT at errnoException (child_process.js:988:11) at Process.ChildProcess._handle.onexit (child_process.js:779:34) 8 Jun 03:04:55 - #recfsusb2n: execvp(): No such file or directory
どうやら、.zshrc で追加した PATH の中に recfsusb2n を入れていたため、./chinachu update -f などを手動で実行することはできても、Chinachu のサービスが recfsusb2n を動かそうとしたときには見つけられず、エラーになっていたっぽい。recfsusb2n を /usr/local/bin/ に移動したら解消された。
WUI からの設定の変更
Chinachu 設定ファイル config.json は、WUI が動いていれば右上の「+設定」から編集することができる。ハイライトや文法チェックもリアルタイムで行なってくれる。編集内容によっては、保存後に
$ sudo service chinachu-operator restart
(あるいは chinachu-wui)でサービスを再起動しないと反映されない。
まとめ
というわけで、LIVA への Chinachu の導入をひととおり行なった。鼻毛鯖に epgrec を入れたときには、MySQL やパーミッションの設定などいろいろ面倒だったような記憶があるが、Chinachu はわりと簡単にできた。まだ使い始めたばかりだけども、UI も作りこまれていて使いやすそう。epgrec の開発が止まっていることもあり、夏アニメが始まる頃までには Chinachu に乗り換えていきたい。
エンコードとなると LIVA では厳しいかもしれないが、普通に Chinachu を動かす分には十分な感じだった。あとは TS ファイルの保存先をどうしようか。それほど録り溜めるつもりはないものの、LIVA に組み込まれているストレージ(eMMC)は 32GB だけなので、なにか考える必要がある。
次回は LAN 内の他の PC から録画・視聴ができるよう、環境を整備していきたい。
LIVA と KTV-FSUSB2 で地デジをみる
鼻毛鯖で使っている USB 地デジチューナー KTV-FSUSB2 を ECS LIVA にくっつけて、視聴・録画を試してみた。OS は Ubuntu 14.04 Desktop。
KEIAN USB地デジ&ワンセグチューナー KTV-FSUSB2/V3
- 出版社/メーカー: KEIAN
- メディア: Personal Computers
- 購入: 2人 クリック: 9回
- この商品を含むブログを見る
チューナーの接続
以前鼻毛鯖で設定した時と同様。
まず USB に接続していない状態で、使用するユーザーを video グループに追加する。
$ sudo gpasswd -a ユーザー名 video
グループの追加を反映させるため、一度ログアウトしてからログイン。
次に /lib/udev/rules.d/89-tuner.rules を以下の内容で作成。
# FSUSB2N SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="0511", ATTRS{idProduct}=="0029", MODE="0664", GROUP="video"
そしてチューナーを接続し、認識されているか確認。
$ lsusb -d 0511: Bus 002 Device 003: ID 0511:0029 N'Able (DataBook) Technologies, Inc.
recfsusb2n のビルド
以下の記事を参考にした。
ソースのダウンロード
recfsusb2n for linux のソース本体を下のリポジトリから取ってくる。2012年11月26日以降は更新されていない。バージョンは 0.9.2。
次に、下のブログから tssplitter_lite と HTTP サーバを内蔵させるパッチをダウンロード。最新は2012年5月30日の記事のもの。
パッチの適用
パッチのアーカイブ recfsusb2n_http_patch2.zip を展開すると中身は以下のようになっている。
recfsusb2n_http_patch2 ├── Makefile ├── decoder.h ├── fsusb2n.cpp ├── readme_patch.txt ├── tssplitter_lite.cpp └── tssplitter_lite.h
これら中身のファイルをすべて recfsusb2n/src/ 内に(上書き)コピーする。
make
上のリポジトリの状態では cmake を使ってビルドするようになっているが、パッチの中に Makefile がついているので、今回はこれを使う。
自分のLIVA+Ubuntu では、以下のように src/Makefile を1行修正する必要があった(-lboost_thread-mt ではない)。
LIBS = -lpthread -lboost_system -lboost_thread -lboost_filesystem
書き換えて make すれば、src/ 内に recfsusb2n という実行ファイルができあがる。
$ sudo apt-get install libboost-thread-dev libboost-filesystem-dev $ cd src $ make
視聴する
引数なしで実行するとヘルプが表示される。
$ ./recfsusb2n usage: ./recfsusb2n [--b25] [-v] [--sid n1,n2,...] [--wait n] channel recsec destfile Remarks: if rectime is '-', records indefinitely. if destfile is '-', stdout is used for output. http broadcasting mode: ./recfsusb2n --http portnumber [--b25] [-v] [--sid n1,n2,...] [--wait n] Options: --b25: Decrypt using BCAS card -v: --sid n1,n2,...: Specify SID number or keywords(all,hd,sd1,sd2,sd3,1seg,epg) in CSV format --http portnumber: Turn on http broadcasting (run as a daemon) --wait n: Wait insert before of recording (1=100mSec)
録画テスト
テストのため、TS ファイルを30秒間だけ録画してみる。チャンネルの27はNHK総合(東京)。
$ ./recfsusb2n --b25 -v 27 30 test.ts
test.ts を VLC で再生してみたらちゃんと録画できていた。成功。
確認が終わったら、recfsusb2n をパスの通っているところ(/usr/local/bin)に入れておく。
内蔵 HTTP サーバを使ってテレビを視聴する
--http オプションを指定すると、HTTP サーバとなるデーモンが立ち上がる。
$ recfsusb2n --b25 -v --http 8888 creating a http daemon recfsusb2n ver. 0.9.2 ISDB-T DTV Tuner FSUSB2N device: "/dev/bus/usb/001/003" run as a daemon.. listening at port 8888 pid = 3475
VLC からこれにアクセスすれば、好きなチャンネルの放送を視聴することができる。たとえば、27chなら次のようにする。
$ vlc http://localhost:8888/27
なお、あらかじめ以下のようなテキストファイルを tv.m3u などとして作成しておき、これを VLC にプレイリストとして読み込ませれば、GUI からのチャンネル変更が容易になる。
#EXTM3U #EXTINF:0,NHK 総合 http://localhost:8888/27 #EXTINF:0,NHK Eテレ http://localhost:8888/26 #EXTINF:0,日本テレビ http://localhost:8888/25 #EXTINF:0,テレビ朝日 http://localhost:8888/24 #EXTINF:0,TBS http://localhost:8888/22 #EXTINF:0,テレビ東京 http://localhost:8888/23 #EXTINF:0,フジテレビ http://localhost:8888/21 #EXTINF:0,東京MX http://localhost:8888/20 #EXTINF:0,放送大学 http://localhost:8888/28
というわけで、LIVA でも普通に地デジの試聴ができた。次は録画予約システム Chinachu を導入してみたい。
Ubuntu 14.04 on LIVA の環境整備
昨日(下の記事)のつづき。
デスクトップ版 Ubuntu を入れたので一応 GUI でも使えるが、普段は SSH でログインして CUI で使おうかと考えている。LAN は有線。
ログインシェルを zsh にする
$ sudo apt-get install zsh … $ zsh --version zsh 5.0.2 (x86_64-pc-linux-gnu) $ which zsh /usr/bin/zsh $ chsh パスワード: mashabow のログインシェルを変更中 新しい値を入力してください。標準設定値を使うならリターンを押してください ログインシェル [/bin/bash]: /usr/bin/zsh
一旦ログアウトしてからログインすると zsh の初期設定が始まる。
This is the Z Shell configuration function for new users, zsh-newuser-install. You are seeing this message because you have no zsh startup files (the files .zshenv, .zprofile, .zshrc, .zlogin in the directory ~). This function can help you with a few settings that should make your use of the shell easier. You can: (q) Quit and do nothing. The function will be run again next time. (0) Exit, creating the file ~/.zshrc containing just a comment. That will prevent this function being run again. (1) Continue to the main menu. (2) Populate your ~/.zshrc with the configuration recommended by the system administrator and exit (you will need to edit the file by hand, if so desired). --- Type one of the keys in parentheses --- 0
とりあえず 0 で抜ける。そのあと、他のマシンで使っている .zshrc を持ってきた。
mosh のインストール
$ sudo apt-get install mosh $ mosh --version mosh 1.2.4a Copyright 2012 Keith WinsteinLicense GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
インストール後、ufw の設定を追加し、mosh への通信ができるようにする。
$ sudo ufw app info mosh プロファイル: mosh タイトル: Mosh (mobile shell) Description: Mobile shell that supports roaming and intelligent local echo Port: 60000:61000/udp $ sudo ufw allow mosh ルールを追加しました ルールを追加しました (v6)
他のマシンから mosh でログインできることを確認して完了。
ECS LIVA を買って Ubuntu 14.04 を入れた
常時稼動用に使えるかなーと思って ECS LIVA-B3-2G-32G を買ってみた。ドスパラで税込17,980円。
Live USB を作る
Ubuntu 14.04 Desktop の日本語 Remix をダウンロードして、UNetbootin で Live USB を作る。このとき、USB メモリは FAT でフォーマットしておく。
LIVA に Ubuntu をインストールする
LIVA にディスプレイと電源をつなぎ、USB 3.0 のポートに Live USB を、USB 2.0 のポートにマウス+キーボードを挿す(こういうとき Logicool の Unifying はラク)。電源ボタンを押すと GRUB が立ち上がるので、Ubuntu のインストールを行う。設定はデフォルトのまま。インストール先は /dev/mmcblk0 になる。
不要なパッケージの削除
ソフトウェアセンターからてきとうに削除。
- 連絡先 (gnome-contacts)
- Empathy インスタントメッセンジャー
- Thunderbird メール
- Transmission BitTorrent クライアント
- ブラウザー (webbrowser-app)
- Remmina リモートデスクトップ・クライアント
- LibreOffice
- Google Drive scope for Unity
- Shotwell
- Simple Scan
- Photos lens for Unity
- Rhythmbox 音楽プレイヤー
- Brasero ディスク作成ツール
- Cheese ウェブカメラ・ブース
- ゲーム類
- Landscape サービス
- オンラインアカウント (unity-control-center-signon)
- Orca スクリーンリーダー
- Amazon
- Ubuntu
- IBus Bopomofo Preferences
- Reactive HP LaserJet 1018/1020 after reloading paper
Ctrl と Caps Lock を入れ替える
- Ubuntu 14.04 で Ctrl キーと Caps Lock キーを入れ替える - Sickly Life はてな版
- UbuntuTips/Desktop/HowToSetCapsLockAsCtrl - Ubuntu Japanese Wiki
$ dconf write /org/gnome/settings-daemon/plugins/keyboard/active true $ dconf write /org/gnome/desktop/input-sources/xkb-options "['ctrl:swapcaps']"
一旦ログアウトしてログインし直す。
SSHでログインできるようにする
とりあえず今日のところはこれまで。普通のデスクトップPCだと思って使ってしまうとちょっと重いが、別にデスクトップ作業をばんばんやりたいわけではないので、これで十分。