結局Terminatorに戻った件。

ターミナルエミュレータを物色する。でいろいろと物色してみたんですが、結局また Terminator に戻ってきてしまいました。まあそれはいいんですが。

なので Terminator のキーバインドを自分用にメモ。というのも、設定から "PuTTY style paste"(右クリックでペースト)を指定したら、それまで右クリックで出ていた分割とか設定とかのコンテキストメニューが出なくなってしまったから。当然ですが。

まず設定メニューを出すにはマウスの右クリックですが、キーバインディングではできなさそうです。"PuTTY style paste" をチェックすると、マウスの中央ボタンがコンテキストメニュー起動になります。中央ボタンが効かない場合には、$HOME/.config/terminator/config ファイルを直接編集して無効にすればよいです。
それからSuperキーというのが出てきますが、いわゆる "Win" キーのことです。

キー 動作 キー 動作
F1 HTMLヘルプ C+S+カーソル ドラッグバーの移動
C+S+O 水平に分割 C+S+PageDown タブ位置を次のタブと入れ替え
C+S+E 垂直に分割 C+S+PageUp タブ位置を前のタブと入れ替え
C+S+T 新規タブ C+S+C 選択部分をコピー
C+S+I 新規Window C+S+V 貼り付け
Alt+LL レイアウトランチャー C+S+S スクロールバー表示のトグル
C+S+W 現在のターミナルを閉じる C+S+F 前方向検索
C+S+Q 現在のウィンドウを閉じる C+S+R ターミナルリセット
A+カーソル ターミナル間の移動 C+'+' フォントサイズ拡大
C+PageDown 次のタブに移動 C+'-' フォントサイズ縮小
C+PageUp 前のタブに移動 C+0 フォントサイズリセット
C+Tab/C+S+N 同一タブの次のターミナルに移動 C+A+W ウィンドウタイトル変更
C+S+Tab/C+S+P 同一タブの前のターミナルに移動 C+A+X ターミナルタイトル変更
Super+I 新規のTerminatorプロセス起動 F11 フルスクリーン切り替え

Chromiumでkeyringの入力を求められる件。その3

Chromiumでkeyringの入力を求められる件。で、もっと簡単な方法がありました。

Manjaro Linux Xfce4 版のみかもしれませんが、メニューから「設定」→「セッションと起動」に進みます。
そこで「SSH鍵エージェント(GNOMEキーリング:SSHエージェント)」と「シークレットストレージサービス」、「証明書および鍵を格納するストレージ」の3つにチェックを入れます。
これでログイン時に自動的に GNOME キーリングを起動してくれます。

ただし自動ログインではやっぱりダメなようです。

ターミナルエミュレータを物色する。

Manjaro をいじっていると、ターミナルエミュレータがデフォルトのものではちょっと不便さを感じてしまうので、物色してみました。

pacman -Ss terminalするとずらーっと出てきますが、そこからピックアップ。条件としては、せっかく軽い Xfce4 を使っているのだから軽いもの、かつタイル分割できるもの。なので Gnome とか KDE 系のものは一旦パス。
  • community/alacritty 0.2.9-1
    A cross-platform, GPU-accelerated terminal emulator
    依存パッケージ: freetype2 fontconfig xclip libxi libxcursor
  • community/jupyter_console 6.0.0-1
    An IPython-like terminal frontend for Jupyter kernels in any language.
    依存パッケージ: ipython python-jupyter_client python-ipykernel python-pygments python-prompt_toolkit
  • community/kitty 0.13.3-1
    A modern, hackable, featureful, OpenGL based terminal emulator
    依存パッケージ: python3 freetype2 fontconfig wayland libx11 libxkbcommon-x11 hicolor-icon-theme libgl
  • community/nyancat 1.5.2-1
    Nyancat rendered in your terminal.
    依存パッケージ: glibc
  • community/qterminal 0.14.1-1 (lxqt)
    A lightweight Qt-based terminal emulator
    依存パッケージ: hicolor-icon-theme qtermwidget qt5-x11extras
  • community/rxvt-unicode 9.22-7
    Unicode enabled rxvt-clone terminal emulator (urxvt)
    依存パッケージ: rxvt-unicode-terminfo libxft perl startup-notification libnsl
  • community/sakura 3.6.0-2
    A terminal emulator based on GTK and VTE
    依存パッケージ: vte3 libxft
  • community/terminator 1.91-6
    Terminal emulator that supports tabs and grids
    依存パッケージ: gsettings-desktop-schemas libkeybinder3 libnotify python2-cairo python2-dbus python2-psutil python2-gobject vte3 xdg-utils
  • community/sl 5.02-5
    Steam Locomotive runs across your terminal when you type "sl" as you meant to type "ls".
    依存パッケージ: ncurses
  • community/termite 14-2
    A simple VTE-based terminal
    依存パッケージ: gtk3 pcre2 gnutls vte-common termite-terminfo
  • community/tilix 1.9.0-1
    A tiling terminal emulator for Linux using GTK+ 3
    依存パッケージ: libx11 gtkd vte3 dconf gsettings-desktop-schemas
おかしなのも紛れ込んでいますがこんなものでしょうか。コアというか、ターミナルエミュレータ本体の部分は vte を組み込んでいるのが多いようです。

以前は Terminator を使っていたのですが、ちょっと重たい感じです。なので軽いものがいいな、と。
OpenGL を使って高速化しているのが alacritty と kitty。軽そうなのが termite とか sakura あたりでしょうか。"best terminal emulator linux" で検索するといくつかランキングページがでてくるのでそれも参考にしつつ。ちなみに termite というのはシロアリのことだそうです。

Sakura を使ってみたら、タイル型ではなくタブ型でした。なぜタイリングにこだわるかというと、サーバのログを "tail -f" で表示させながらエラー確認をすることが多いからです。

Termite は画面もシンプルで軽く、またモーダルというのがおもしろいです。ArchLinux に説明のページがあります。が、tiling という言葉があったので誤解したのですが、どうやらこれは「タイリング型のウィンドウマネージャ」ということらしいです。ちょっと使った感じとしては軽くていいのですが…。

Alacritty は GPU を使うということで、どのくらい使用するのかはわかりませんがスクロールなどは素早い印象です。

Kitty はタイリングというよりはマルチウィンドウみたいな感じで、ちょっと好みと違うかな。

とりあえず Alacritty がスタイル的に合いそうな気がするので、ちょっと使ってみたのですが、タイリングの部分は tmux を利用するようで、これはちょっとないかな。Alacritty は Windows 版もあるようですが、何が走るんだろう。設定などは Alacritty Wiki にあります。

結局また Terminator に戻りそうです。

それからターミナルエミュレータで256色を表示してみたいときには、show-all-256-colors.pyなんかを使うと手軽に表示できます。

Chromiumでkeyringの入力を求められる件。その2

Chromiumでkeyringの入力を求められる件。がその2に続いてしまいました。

su をすると /etc/profile.d/keryring.sh がエラーを出してきます。
% su
パスワード:
** Message: 08:21:18.322: couldn't access control socket: /run/user/1000/keyring/control: 許可がありません
** Message: 08:21:18.326: couldn't connect to dbus session bus: Could not connect: 許可がありません
** Message: 08:21:18.326: The gnome-keyring control directory cannot be accessed: /run/user/1000/keyring: 許可がありません

** (gnome-keyring-daemon:23044): WARNING **: 08:21:18.326: couldn't create socket directory: /run/user/1000/keyring-UERQ0Z: 許可がありません

** (gnome-keyring-daemon:23044): WARNING **: 08:21:18.326: couldn't bind to control socket: /run/user/1000/keyring-UERQ0Z/control: 許可がありません

これは無視しておけばいいんですが、ちょっとかっこ悪い。なのでなんとか対策を考えます。

su して superuser になると、UID が 0 になります。なのでこれを使ってみます。

/etc/profile.d/keyring.sh:
if [ $UID -ne 0 ]; then
  eval $(/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh)
  export SSH_AUTH_SOCK
fi

これでいいかどうか、ですが、基本的に root ログインはしないこと、root ログインするようなときはコンソールからになるだろうし、そこでウェブブラウザを使うような危険なことはしないことなどを考えると、いいんじゃないでしょうか。

Chromiumでkeyringの入力を求められる件。

Manjaro Linux で Chromium を立ち上げたときに、keyring が開けないといってパスワードを毎回求められるのが鬱陶しいです。Firefox とかでは出ないのに。
で、空のパスワードを設定するといいよ、という対策が引っかかってくるんですが…。Manjaro だと別のパッケージを新たにインストールすることになりますが、それはなんだか嫌です。それに空のパスワードを設定するのも気持ち悪いです。

追記: Chromiumでkeyringの入力を求められる件。その3でもっと簡単な方法を書きました。

Chromium keyring change?に方法が書かれていましたので、翻訳しておきます。

もし keyring パスワードにログインパスワードと同じものを設定しているなら 4 に飛んでください。
  1. ~/.local/share/keyrings内のファイルを削除します。
  2. Chromium を開きます。
  3. パスワード作成のダイアログが出てきたら、ユーザアカウントのパスワードと同じものを設定します。
  4. 以下の内容を /etc/pam.d/login の最後に追加します。
    auth       optional     pam_gnome_keyring.so
    session    optional     pam_gnome_keyring.so        auto_start
  5. 以下の内容を /etc/pam.d/passwd の最後に追加します。
    password    optional    pam_gnome_keyring.so
  6. 以下の内容で /etc/profile.d/keyring.sh を作成します。
    eval $(/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh)
    export SSH_AUTH_SOCK
  7. 一旦ログアウトして再度ログインします。
ホームディレクトリのドットファイルを整理する。でも書いていますが、/etc/profile.d/*.shはログイン時に読み込まれ、実行されるようになっていますので、上記の keyring.sh は自動で実行されます。

ログインパスワードを変更した場合には上記の動作は無効になりますので、再度1から3をやり直すか、seahorseを使って新しいパスワードを設定する必要があります。
また、この方法は PC の起動時に自動ログインの設定がしてあると、うまく行きません。

だそうです。

ホームディレクトリのドットファイルを整理する。

UNIX 系の OS で、ちょっと悩ましいのは $HOME(ホームディレクトリ)にドットファイルが増えてしまうことです。

ls -a すると表示されるリストの8割以上がドットファイルとか、もう許して下さいな感じです。

% ls -a
.              .aliases~                        .dbus        .hgignore   .profile         .xinitrc              .zshrc~    __pycache__
..             .bash_history                    .dir_colors  .hgignore~  .python_history  .xprofile             Desktop    bin
.ICEauthority  .bash_logout                     .dmrc        .hgrc       .ssh             .xsession-errors      Documents  build
.Xauthority    .bash_profile                    .esd_auth    .hgrc~      .texlive         .xsession-errors.old  Downloads  work
.Xclients      .bashrc                          .gem         .lesshst    .thumbnails      .zcompdump            Music
.Xmodmap       .cache                           .gkrellm2    .local      .thunderbird     .zsh                  Pictures
.Xmodmap.orig  .chrome-remote-desktop-session   .gnupg       .mozc       .vim             .zshenv               Public
.Xmodmap~      .chrome-remote-desktop-session~  .gvimrc      .mozilla    .vimrc           .zshenv~              Templates
.aliases       .config                          .hg          .pki        .wget-hsts       .zshrc                Videos

編集した結果バックアップファイルやらコピーを残してるのやらありますが、まあざっとこんな感じ。もうちょっと整理して数を減らしたいところです。
このときに頼りになるのが XDG Base Directory Specification。それを規格から実装に照らして説明してくれているのがこちら

なので一つ一つやっていきます。環境は Manjaro Linux XFCE 版なので、他のディストロは適当に読み替えてください。

システム

システム側であらかじめ設定されているのは以下の環境変数です。
XDG_SESSION_ID=c5
XDG_RUNTIME_DIR=/run/user/1000
XDG_SESSION_TYPE=tty
XDG_SESSION_CLASS=user
また、ユーザ側で設定しておきたいのは以下の環境変数です。
XDG_CONFIG_HOME=$HOME/.config
XDG_CACHE_HOME=$HOME/.cache
XDG_DATA_HOME=$HOME/.local/share
XDG_RUNTIME_DIR はユーザごとに設定される /var/run みたいなものです。デフォルトではユーザIDが振られています。必要なら設定すればよいでしょう。
それとは別に、/etc/xdg に設定ファイルがいくつか置かれています。ただしこれらは ssh ログイン時などには読み込まれないようなので、ここでは置いておきます。
ここでは、お仕着せでシステムワイドに設定する方向で進めていきます。

bash

まずは標準の shell の bash。Manjaro の場合には、次の順序で読み込まれるようです。bash -l -v で確認しました。つまりログインシェルの場合。
  1. /etc/profile
  2. /etc/profile.d/*.sh
    /etc/profile から呼ばれる。アルファベット順に読み込まれる。アプリケーションごとに必要な設定はここ。ロケールもここ。
  3. /etc/bash.bashrc
    /etc/profile から呼ばれる。システムワイドの bash 設定を行う。プロンプトや $TERM の設定はここ。
  4. /usr/share/bash-completion/bash_completion
    もしあれば読み込まれる。Manjaro にはない。
  5. $HOME/.bash_profile
    $HOME/.bashrc を source しているだけ。
  6. $HOME/.bashrc
    ユーザの環境変数とか alias とかいろいろと設定する。
  7. プロンプトが表示されて bash 起動完了。
  8. $HOME/.bash_logout
    ログアウト時に読み込まれる。何もしていない。
  9. /etc/bash.bash_logout
    ログアウト時に読み込まれる。何もしていない。
bash の場合にはユーザごとのドットファイルはハードコードされているようなので、ドットファイル類を .config/bash に移動することは(現状では)できません。ただ、他のアプリケーションのための設定は必要なので、ここでは /etc/profile.d/xdgenv.sh あたりで XDG ユーザ変数を設定するようにすればよいでしょう。そうすることで他の shell からも source することができます。
/etc/profile.d/xdgenv.sh:
# Set user variables based on XDG Base Directory Specification.
#

export XDG_CONFIG_HOME=$HOME/.config
export XDG_CACHE_HOME=$HOME/.cache
export XDG_DATA_HOME=$HOME/.local/share

zsh

zsh では環境変数 ZDOTDIR が設定されているとそこを見に行きます。
  1. /etc/zsh/zshenv
    本来は /etc/zshenv を読みにいく(manページの説明)ようだが、Manjaro では /etc/zsh/zshenv を読みにいく。
  2. $ZDOTDIR/.zshenv
    環境変数 ZDOTDIR が指定されていれば $ZDOTDIR/.zshenv を、指定されていなければ $HOME/.zshenv を読む。
  3. /etc/zsh/zprofile
    Manjaro では /etc/zsh/zprofile の中身は emulate sh -c 'source /etc/profile' となっていて、/etc/profile を読み込む。/etc/profile の読み込むものは bash と同じ。
  4. $ZDOTDIR/.zprofile
    ZDOTDIR が指定されていなければ $HOME/.zprofile を読み込む。
  5. /etc/zsh/zshrc
  6. $ZDOTDIR/.zshrc
  7. /etc/zsh/zlogin
    ログインシェルの場合に読み込まれる。
  8. $ZDOTDIR/.zlogin
    ログインシェルの場合に読み込まれる。
  9. プロンプトが表示されて bash 起動完了。
  10. $ZDOTDIR/.zlogout
    ログアウト時に読み込まれる。何もしていない。
  11. /etc/zsh/zlogout
    ログアウト時に読み込まれる。何もしていない。
ということなので、bash のところで /etc/profile.d/xdgenv.sh を作成していれば、XDG* はそこで設定されます。また、/etc/zsh/zshenv があれば一番最初に読み込まれるので、ZDOTDIR をそこで設定すればいいのですが、ZDOTDIR=$XDG_CONFIG_HOME/zsh とする必要があるため、二重に読み込むことになりますが以下のようにします。
# /etc/zsh/zshenv
# set ZDOTDIR respecting XDG Base Directory Specification
#

emulate sh -c 'source /etc/profile'
export ZDOTDIR=$XDG_CONFIG_HOME/zsh
また、標準ではコマンドヒストリは $HOME/.zsh/histfile に保存されますが、これを $XDG_CACHE_HOME/zsh/history に変更します。コマンドヒストリはユーザ設定なので、これは $XDG_CONFIG_HOME/zsh/.zshrc で設定し直します。
$XDG_CONFIG_HOME/zsh/.zshrc:
HISTFILE=$XDG_CACHE_HOME/zsh/hisotry
zstyle :compinstall filename '$ZDOTDIR/.zshrc'
これで $HOME から zsh 関連のドットファイルは削除できます。

git

0d94427eから XDG_CONFIG_HOME に対応しているので、$XDG_CONFIG_HOME/git/config を使います。

Neovim

Neovim は最初から XDG Base Directory Specification に沿うように作られているので、$XDG_CONFIG_HOME/nvim を利用すれば問題ありません。
ここで、vim からも同じ設定を使えるように init.vim などを記述しておくと、nvim でも vim でも同じように使えます。

vim

vimはちょっとややこしいです。前述の ArchLinux の Wiki に書いてあるように、.vimrc などは基本的にハードコードされています。が、別途 VIMINIT=":source $XDG_CONFIG_HOME"/vim/vimrcを shell の設定時に行っておけば、vim の起動時に $VIMINIT を参照してくれます。
なので $ZDOTDIR/.zshenv に設定しておきます。ここでは vim と nvim の設定を共通にすることを考えているので、あえて $XDG_CONFIG_HOME/nvim/vimrc にします。ただし、undodir などが一緒になると問題があるかもしれないので、そこは別にしておきます。Manjaro の場合には vim は標準ではインストールされていなくて、ex および vi が標準なので、あえて vim をインストールせずに alias vim=nvim するのもアリかもしれません。
# .zshenv

PATH1=$HOME/bin
export PATH=$PATH:$PATH1

export QT_SELECT=5
export GTK_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export QT_IM_MODULE=fcitx

# better yaourt colors
export YAOURT_COLORS="nb=1:pkg=1:ver=1;32:lver=1;45:installed=1;42:grp=1;34:od=1;41;
5:votes=1;44:dsc=0:other=1;35"

# env for locate updatedb for local files.
export PRUNEPATHS="`echo $HOME/.cache/[a-ce-z]*`"
export PRUNEPATHS="`find $HOME -name \".hg\" -printf \"%p \"` $PRUNEPATHS"
export PRUNEPATHS="$HOME/.mozilla $HOME/.dbus $HOME/.thumbnails $HOME/.thunderbird $
PRUNEPATHS"
export LOCATE_PATH=$XDG_CACHE_HOME/mlocate.db

export VIMINIT=":source $XDG_CONFIG_HOME"/nvim/vimrc
また、vimrc は以下の内容にします。
" vim:set et ts=2 sts=2 sw=2 tw=0 fenc=utf-8:
" _vimrc : initialization file for Vim.
" just source init.vim for commonnization.
"
" Modified: 9 Apr 2018
"
source $XDG_CONFIG_HOME/nvim/init.vim

" mswin.vim maps those keys when gui=yes.
" this is terrible and should be unmapped.
if has('gui')
  unmap <C-f>
  iunmap <C-f>
  cunmap <C-f>

  unmap <C-h>
  iunmap <C-h>
  cunmap <C-h>
endif

mercurial

$HOME/.hgrc は $XDG_CONFIG_HOME/hg/hgrc に移動することができます。が、.hgignore はそのディレクトリ以下の ignore ファイルを指定しているため、移動できません。また .hg ディレクトリはリポジトリのため、移動できません。

その他

.ICEauthority

libice が作成するファイルですが、Use XDG base directory instead of $HOME for .ICEauthorityで議論され、パッチがあげられ、2019年3月25日に push されているので、いずれマージされるでしょう。
それまでは触らないでおくか、export ICEAUTHORITY="$XDG_RUNTIME_DIR"/ICEauthority を /etc/zsh/zshenv あたりに入れておけばよいでしょう。ただ、環境変数がやたら増えるのも困りものですから、ここでは放置しておきます。

.Xauthority

同上です。export XAUTHORITY="$XDG_RUNTIME_DIR"/Xauthority

.Xmodmap

対応策はなさそうです。

.dircolors

source "$(dircolors "$XDG_CONFIG_HOME"/dircolors)" を $ZDOTDIR/.zshenv あたりに入れておきます。bash のほうは $HOME/.bashrc のdircolors に関する部分の変更が必要です。

.mozc

移動できません。ソースを見ましたが、XDG_CONFIG_HOME を参照している部分はありませんでした。

.mozilla(firefox)

$XDG_CONFIG_HOME/mozilla と $XDG_CACHE_HOME/mozilla と $XDG_DATA_HOME/mozilla がある場合にはそちらを使うようです。
なので、以下のようにします。
$ mkdir .config/mozilla
$ mkdir .cache/mozilla
$ mkdir .local/share/mozilla
$ chmod 700 .config/mozilla .cache/mozilla .local/share/mozilla

.python_history

Python がインタラクティブモードで起動されると readlline が作成するようです。今のところ移動できません。

.texlive

ハードコードされているようで変更できません。

.thumbnails

$XDG_CACHE_HOME/thumbnails/ があればそちらを使うようです。

.thunderbird

ハードコードされているようで変更できません。

.xinitrc

基本的には DesktopManager(lightdmやgdmなど)を使っていれば xinit を呼ぶことはないので不要なはずですが、export XINITRC="$XDG_CONFIG_HOME"/X11/xinitrc を指定することで xinit は参照してくれます。

.gnupg

export GNUPGHOME="$XDG_CONFIG_HOME"/gnupgすることで参照してくれます。

Jcode.pmではなくてEncode.pmを使う。

自分のPerlに関する情報は10年以上前から止まってた、ということですね。
Jcode.pm - jcode.pl の後継、Encode.pm への架け橋というページで、2008年5月に
Perl 5.8.0 より、Jcodeの全機能は Encode module を通じてPerlに標準装備となります。Jcodeのメンテナンスは旧Perlのために 今後も続けていく所存ですが、最新のPerlをお使いの方には、より高機能、高 性能、そしてなんといっても標準装備の Encode の方をお薦めします。
ということだそうで、現在の環境では Jcode.pm ではなくて Encode.pm(Encode::JP) を使うのがよい、と。Encode.pm は core に取り込まれてるんですね。

未だにサーバには jcode.pl を使った古典的CGIアプリが走っているので、最近のサーバのトレンドに合わせて FastCGI と SQLite を使うように書き直して、あるいはもしかしたら PHP とか Python あたりで書き直したほうがいいのかも。

SWDなら3線でいいとはいうものの。

 安価で優秀なデバッグプローブはないかしら、と探したら、 Raspberry Pi Debug Probe というのがあったんですが、これは3線がにゅるんと出てるだけです。 もちろんSWDなら3線を繋げばいいのではありますが、汎用的に考えるなら5x2のリボンケーブルコネクタが欲し...