mimikakimemo

自分用メモ。

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 USB地デジ&ワンセグチューナー KTV-FSUSB2/V3

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 USB地デジ&ワンセグチューナー KTV-FSUSB2/V3

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 USB地デジ&ワンセグチューナー KTV-FSUSB2/V3

チューナーの接続

以前鼻毛鯖で設定した時と同様。

まず 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 Winstein 
License 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 でログインできることを確認して完了。

普段使うツールいろいろ

apt-get で入れる。順不同。

  • emacs
  • lv
  • git
  • tmux
  • silversearcher-ag
  • tree
  • build-essential
  • source-highlight

今は録画に 鼻毛鯖+epgrec+KTV-FSUSB2 を使っているが、近いうちに LIVA+Chinachu+KTV-FSUSB2 に移行してみたい。

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 になる。

不要なパッケージの削除

ソフトウェアセンターからてきとうに削除。

デフォルトで作成されるディレクトリ名を英語に

「ダウンロード」→「Downloads」など。下のコマンドを実行してログインし直す。

$ LANG=C xdg-user-dirs-gtk-update

Ctrl と Caps Lock を入れ替える

$ dconf write /org/gnome/settings-daemon/plugins/keyboard/active true
$ dconf write /org/gnome/desktop/input-sources/xkb-options "['ctrl:swapcaps']"

一旦ログアウトしてログインし直す。

SSHでログインできるようにする


とりあえず今日のところはこれまで。普通のデスクトップPCだと思って使ってしまうとちょっと重いが、別にデスクトップ作業をばんばんやりたいわけではないので、これで十分。