“evdev-right-click-emulation” はタブレットで Linux を使うのにすごく便利

タブレットで GNU/Linux を試したことのある方なら,タッチスクリーンでは右クリックできないことにお気づきのことでしょう。

Gnome 3 はこの問題の解決に取り組んでいるようですが,まだ不完全です。キーの組み合わせで右クリックを発生させるようなスクリプトでさしあたり右クリックできるようになりますが,Android や Windows と比べてあまりに不便です。

そんなわけで,これは X か何かの設計上の問題に起因していて解決は困難だろうと思っていました。この小さなプログラムに出会うまでは。

Peter Cai さんによる evdev-right-click-emulation は,デバイスを低レベルで直接読んで長押しを検知するというシンプルな方法で,右クリックの問題をほぼ解決しています。

このやり方はおそらく正攻法ではないのでしょうし,何らかの予期しない問題を招く恐れもありますが,evdev-right-click-emulation がタブレット上での GNU/Linux の UX を大幅に改善することは間違いありません。

“evdev-right-click-emulation” is a smashing useful tool for Linux tablet users

If you’ve ever tried GNU/Linux on tablet devices, you might have noticed that you can’t do right click with a touchscreen.

Gnome 3 seems trying to solve this problem, but it’s still incomplete. Hacky script like emulating right click with key combination may work as a workaround, but it’s a too awkward way compared to those of Android or Windows.

I believed this should a design problem of X or something and too hard to fix… Until meet this tiny program.

evdev-right-click-emulation by Peter Cai have successfully (almost) solved that problem with simpler way; read devices directly and detect long tap.

Though this mean might not a kind of entering at the front door and possibly cause unexpected errors, it is certain that evdev-right-click-emulation drastically improves UX of GNU/Linux on tablet devices.

Debian 10 + Xfce + Let’s note RZ4 で画面自動回転

GNOME 3 であれば iio-sensor-proxy 経由で加速度センサによる画面自動回転にデフォルトで対応していますが,GNOME 3 はラップトップのデスクトップ環境としての実用性が限られているという問題があります。しかし,Linux の常としてセンサの入力もデバイスファイルとして扱われているので,他のデスクトップ環境でも,簡単なスクリプトで状態を読んでやれば画面の自動回転ができるようになります。

とはいえスクラッチで書くのも大変なのでとりあえず ArchWiki で紹介されている “rotate.py” を試してみたところ,そのまま画面回転ができました。

ただし,このスクリプトでは RZ4 のタッチパネルは想定されず,このままではタッチ操作のジオメトリが変わらずに表示とずれてしまいますので,ちょっとだけ修正する必要があります。幸いにも処理の実際の内容である xinput での設定自体は全く同じでよいので,タッチパネルとして扱わせるためにスクリプトが用意しているリストに書き加えるだけです。

RZ4 は eGalax 製のデジタイザを使用しており,xinput –list –name-only での表示名に(”touchscreen” “wacom” は含まれず)”eGalax” の文字列が含まれるため,

touchscreen_names = ['touchscreen', 'wacom']

とある行を

touchscreen_names = ['touchscreen', 'wacom', 'egalax']

と書き換えてください(入力を一度小文字にした上で比較しているので,すべて小文字の egalax と指定してください)。

あとはこの rotate.py を自動起動して常駐させるなり,必要なときに起動するなりすれば, Xfce やその他のデスクトップ環境でもばっちり画面回転できるようになります。Onboard と組み合わせればタブレットとしてそれなりに実用的に使えるようになります。

余談:
この機種は Buster ではバックライトをホットキーから調整できない問題がありますが,例によって xorg の設定ファイルを追加するだけで対応可能です。

さらに余談:
どうやら UEFI で設定された画面輝度が OS 起動後に操作できる上限となるようで,UEFI での輝度が一定以下だと OS 起動後の輝度調整ができなくなります。わかってしまえばどうということもないことですが,上記のハードウェア認識の問題と混同してしまうと苦労することになるので気をつけましょう。 UEFI 画面が表示されるのは一瞬のことですので,通常は最大輝度にしておくのがよいでしょう。

……ということをなぜ書くかというと,以前ハマったこの問題にまたハマってしまい,検索したらこの記事が出てきて,ふと思い出して無事解決できたからです。次も思い出せるかはわからないので記録しておきます(何度も忘れるな)。

Debian 10 “Buster” が stable に

2019年7月6日,Debian 10 “Buster” が stable になりました。これにともない, “Stretch” は oldstable となります。

Buster ではそれほど目立つ変化はありませんが,AppArmor のデフォルトでの有効化,UEFI 対応強化など足回りが着実に強化されています。これまで testing として使ってきた感覚では,全体的に X 周りの安定性が高まっている印象もあります。

Stretch は2022年頃まで LTS 対象となる見込みです。Buster は2022年頃まで stable としてサポートされ,2024年頃まで LTS 対象となる見込みです。

Xfce の絶対に覚えておきたいキーボードショートカット6選

キーボードショートカットは強い味方

キーボードショートカットを覚えておくといろいろと便利なのは,必ずしも GUI に頼らなくてもよい Linux 環境でも同じです。

ショートカットの一覧を頭から暗記するようなことはおすすめできませんが(自分自身の利用スタイルで利用頻度の低いものまで覚えるのは混乱の元ですし,だいいち退屈です),誰であれまずこれだけは覚えておくと便利だろうという最低限のショートカットだけを紹介します。他の多くのデスクトップ環境でも使いまわせるので,この機会に覚えてみてください。

絶対に覚えておきたい Xfce キーボードショートカット

ショートカット 機能
Alt + F4 ウィンドウを閉じる
Alt + F9 ウィンドウを最小化する
Alt + F10 ウィンドウを最大化する
Alt + Tab 画面のフォーカスを切り替える(ウィンドウを切り替える)
Ctrl + Alt + D デスクトップを表示
Ctrl + Alt + Del 画面をロックする

付録(の方がなぜか長い)・絶対に覚えておきたい Firefox のキーボードショートカット8選

ショートカット 機能
Alt + ← or Ctrl + [ 戻る
Alt + → or Ctrl + ] 進む
Ctrl + Tab 右のタブへ
Ctrl + K or Ctrl + J 検索バーにフォーカスを移動
Ctrl + F ページ内検索
Ctrl + T 新しいタブを開く
Ctrl + F4 or Ctrl + W タブを閉じる
Ctrl + Shift + T 閉じたタブを開きなおす

特に Ctrl + K と Ctrl + Shift + T を使いこなせると作業効率が上がります。

light-locker でのユーザ切り替え

あるユーザでログインしたまま別のユーザでもログインするユーザ切り替え user switching は,同じマシンを複数の人が利用する場合のみならず,用途に応じて環境を切り替える手段としても便利ですが,light-locker の場合,どのようにして利用するのかわかりにくいです。
GDM 環境の場合は多くのデスクトップ環境で切り替えに標準対応しており,lightdm でも xscreensaver では設定変更で機能を有効化できるところ,light-locker ではそのような設定が見あたりません。
xfce4-whiskermenu-plugin では ”gdmflexiserver” を呼び出すようになっていますが GDM 用ですし,検索してみると xfswitch-plugin をインストールするといいという話もありますが,これも GDM に依存しています。
もしや light-locker ではユーザ切り替えができないのかとも思いましたが,なんのことはない,lightdm のログイン画面をロック画面として利用する light-locker では「特別な切り替え機能は必要ない」というのが答えでした。
すなわち,画面をロックし(light-locker-command –lock),別のユーザを選択してログインすればユーザを切り替えられます。

GRUB を復旧したメモ

あるマシンで,某 OS のアップデートがどうしても失敗するので諦めて October 2018 Update のインストールメディアを作成して 1クリーンインストールしたため,MBR が書き換えられてしまいました。これでは,メインの OS である Debian GNU/Linux が起動できません。
以下は GRUB (GRUB2) を再導入することで問題を解決したメモです。

前提

  • Linux 関連領域は /(DM-Crypt で暗号化)と /boot(平文)に切り分けられている
  • 両パーティションともデータは無傷で,MBR が書き換えられているだけ

手順

1. Linux システムを USB ブートする

世に言う Live ディスクですね。Debian ではここにあります。
USB メモリへの書き込みは,Linux の場合,GNOME Disks (gnome-disk-utility) 2 を使うのが簡便でしょう。GParted (gparted) にはない機能もあり,入れておいて損はないソフトです。
使用するのはできれば同じディストリビューションの同じバージョン・アーキテクチャが望ましいでしょうが,GRUB 関連パッケージのバージョンがそれなりに近ければなんでも構わないかと思います。ちなみに今回は 64 bit Debian GNU/Linux 9 に対し 32bit の Linux Mint 19 で実行しましたが特に問題は生じませんでした。

2. 内蔵ドライブのパーティションをマウントする

内蔵ドライブの各パーティションを,/ をマウントした場所を起点に元あったように並べていくイメージです。
実例で説明したほうが早いでしょう。
修復したいシステムで
/dev/sda5 が /boot
/dev/sda6 が /
だったとしたら,
/mnt をマウントポイントにするとして,
/dev/sda5 を /mnt/boot
/dev/sda6 を /mnt
にマウントすればいいわけです。簡単ですね。
具体的には,以下のようになるでしょう。

# mount /dev/sda6 /mnt
# mount /dev/sda5 /mnt/boot

自分の場合,/ は DM-Crypt で暗号化されており手動でマウントするのはちょっと面倒だからと,Thunar(xfce 標準のファイルマネージャ)でダブルクリックして /media/ 以下にふつーにマウントしてしまいました。もちろん,これでも特に問題はありません 3

3. GRUB をインストールする

いよいよお待ちかね(?),GRUB をインストールします。
ここで注意すべきは,BIOS 互換モードでインストールされたシステムでは通常アーキテクチャ等を意識する必要がないのに対し,EFI モードでインストールされたシステムに対しては,対象システムにあわせたオプションを指定しなければならないということです。詳しくは Gentoo Wiki の表と Arch Wiki の該当項目をご覧いただくとして,i386 や x64 といった target と BIOS や EFI といった platform の組み合わせで指定すべきオプションが異なり,また,UEFI 関連ファイルのディレクトリを指定する –efi-directory や UEFI にどのような名前で登録するかを指定する –bootloader-id といった EFI 特有のオプションを指定する必要があります。
もっとも,実用上は「BIOS 互換か 64bit EFI か」だけに気をつければよいかと思います。
BIOS 互換モードか 64bit EFI モードか判別する方法として,修復したいシステムの /boot(上記の例の /dev/sda5)を見るというものがあり,EFI モードでインストールされたシステムには /boot/efi が存在し,/boot/grub/i386-pc ではなく /boot/grub/x86_64-efi が存在します。

BIOS 互換モードの場合(64bit/32bit 問わず)

# grub-install --root-directory=/mnt /dev/sda

なお,設定ファイルが破損している場合は,いったん削除して再構築する必要があります。その場合は以下のようになります。

# grub-install --root-directory=/mnt --recheck /dev/sda
# update-grub

64bit EFI モードの場合

# grub-install --root-directory=/mnt --target=x86_64-efi --efi-directory=/mnt/boot/efi --bootloader-id=grub --recheck /dev/sda

–recheck しているのは bootloader-id がディストリビューションにより異なる場合があるためであり,できればディストリビューションが使用している bootloader-id を確認し,それを指定することで,わざわざ再構築せずにそのまま流用するのが無難かと思います。
さて,これで完成です。

Installation finished. No error reported.

となれば問題ないはずです。再起動してみましょう。
ダメなら手順に誤りがないか確認して再実行です。

感想

以前にも経験はありましたが,もう5年くらい前の話で,実のところすぐにうまくいくとは思っていなかったのですが,ほんの小手調べのつもりでいじっただけで修復できてしまいました。
やはり Linux は血圧に優しい素晴らしい OS です……どこかの OS とは違って。

参考

GRUB – ArchWiki

GRUB2 – Gentoo Wiki

2019/1/10 EFI モードでインストールされている場合について追記

Notes:

  1. これが簡単にできるようになったのは素晴らしい。そもそも同じメジャーバージョン内でアップデートに失敗するなよという話ではあるけど……
  2. なお,インストールするには gnome-disk-utility,起動するには gnome-disks とパッケージ名が微妙に変わりますが,GNOME Disks (gnome-disks) とは,ツール群である GNOME Disk Utility (gnome-disk-utility) に含まれるソフトウェアのひとつの名称ということのようです。
  3. 例は以下も引き続き /mnt として説明します。

Linux でサスペンドからのレジューム後にタッチパッドが使えない時は

ラップトップ PC によっては,サスペンドからのレジューム後にタッチパッドが使えなくなる場合があります 1。BIOS/UEFI の設定で改善したという話もあり,どうも BIOS/UEFI の挙動に原因があるように見受けられますが,幸いにもドライバモジュールの再読込だけでも正しく認識されるようになります。具体的には,サスペンド時に modprobe -r psmouse,レジューム時に modprobe psmouse を実行してやれば良いわけです。
なお,最近の機種の場合,異なるバスのデバイスが使われている場合もあり,その場合には i2c_hid や rmi_smbus を試す必要があるようです。なお,これらのモジュールはタッチパッド以外にも使われている場合があり,アンロードは psmouse の場合ほど安全ではないため,事前に調査するべきでしょう。

さて,早速片付けてしまいましょう。
まずはサスペンド時に modprobe -r するサービスを書きます。

# vi /etc/systemd/system/tptweak-suspend.service
[Unit]
Description=Unload psmouse
Before=suspend.target

[Service]
Type=simple
ExecStart=/sbin/modprobe -r psmouse

[Install]
WantedBy=suspend.target

同様に,レジューム時に modprobe するサービスを書きます。

# vi /etc/systemd/system/tptweak-resume.service
[Unit]
Description=Load psmouse
After=suspend.target

[Service]
Type=simple
ExecStart=/sbin/modprobe psmouse

[Install]
WantedBy=suspend.target

あとは,登録するだけです。簡単ですね。

# systemctl daemon-reload
# systemctl enable tptweak-suspend.service
# systemctl enable tptweak-resume.service

非常にシンプルなサービスのため,たまには失敗するかもしれませんが,今のところうまく機能しています。

参照:
Synaptics タッチパッド – ArchWiki
電源管理 – ArchWiki
サスペンドの前後でコマンドを実行する。 – ガジェット好きの日記

Notes:

  1. いままでに何台かの富士通製で遭遇。

Debian Testing で最新の Firefox を使う

 Firefox のバージョンも60を数えた2018年。Shiretoko (バージョン3.5)がもう遠い昔のことであるように思われます。アドオン類もメインストリームは Quantum 対応に移りつつあり,Quantum アップデートによる改革は成功したと言えるでしょう。
 ところで,Debian GNU/Linux が採用している Firefox ESR は Quantum アップデート以前のバージョン52で,これをメインで使ってきた私は半年間に渡って世界の流れ(?)から取り残されてきたことになります。
 もちろん Mozilla が配布しているパッケージを導入することもできるのですが,/opt 以下にインストールすることは想像もしたくない,かといって ~/ 以下にインストールするのもユーザ権限で改変できるわけで気持ち悪い……というわけでなんとなく ESR を使い続けてきました。しかし,unstable (Sid) にある firefox が Mozilla による正式リリース版ほぼそのものだということを(今更)知ったので,unstable のレポジトリから持ってきてみました。偉大なる APT は我らを導く!
 基本的にはDebian Mozilla team APT archive のページにある通りなのですが,ひとつ重大な問題があって,この通りにするとシステム全体が unstable にアップグレードされてしまいます。こわい。なので,これに加えて Default-Releasae も指定してやる必要があります。具体的には以下のような手順になります。

この記事は Debian Testing(執筆時点 Buster)における方法を紹介したものです。
Stable(執筆時点 Stretch)で以下の手順を実行すると、システムが破壊される可能性があります。
必ず,お使いのブランチが Testing であることを事前に確認してください。
  1. unstable のレポジトリを追加
    # vi /etc/apt/sources.list.d/10-unstable.list
    
    deb http://http.debian.net/debian unstable main
    

     

  2. Default-Release を設定
    # vi /etc/apt/apt.conf.d/10default-release
    
    APT::Default-Release "testing";
    

     

  3. firefox と firefox-l10n-ja をインストール
    # apt update
    # apt install -t unstable firefox firefox-l10n-ja
    

     
     以上で最新の Firefox がインストールされました。
     今の最新版は 60.0.1,検証期間が完了して Debian レポジトリの Firefox ESR が 60.2 に置き換わるまでにはしばらく時間がかかりますが,これでもう安心です。もっと早く気づくべきだった
     なお,Debian Mozilla team APT archive ページを見るに,このやり方を stable で実行することは推奨されないようです。実際に試してみると,なぜか libc6 等にまで依存関係があり巻き込んでアップデートしてしまうようで,たしかにこれはよくないです。stable ではおとなしく firefox-esr を使うか ~/ にバイナリを置くかするようにした方がよいかと思われます。
     
     
     
    以下は自分用メモ(読まずにコピペしないこと!)

    echo "deb http://http.debian.net/debian unstable main" > /etc/apt/sources.list.d/10-unstable.list; echo "APT::Default-Release "testing";" > /etc/apt/apt.conf.d/10default-release; apt update; apt install -t unstable firefox firefox-l10n-ja
    

Firefox で国際化ドメイン名を punycode で表示する ―― IDN 悪用フィッシングにとりあえず対策

 最近になって暗号通貨取引所に成りすましたフィッシングサイトが多く現れているようで,国際化ドメイン名(IDN)悪用の問題が話題になっているようです。
 この問題は国際化ドメイン名の登場当初から指摘されており,たとえば「apple.com」ではなく「аpple.com」(キリル文字で「アー・エル・エル・パーロチカ・イェー」)で登録するなどして,正規ウェブサイトのドメイン名と視覚上見分けがつかないドメイン名を取得し,フィッシングに悪用するという手法です。

窓の杜 – 【NEWS】Mozilla/Firefox/Operaなどに国際化ドメイン名の盲点をついたURL偽装の問題(2005/02/08)
肉眼では偽物と見抜けない国際化ドメイン悪用のURL偽装、Google Chromeなどで対策進む – 窓の杜(2017/04/21)

 国際化ドメイン名のコンセプト自体に起因している問題であるため抜本的な対策は困難で,十年以上にわたり対策が試みられ続けてきてなお完全な解決を見ていない問題ですが(なにしろ Unicode には十万以上の文字が収録されていますし,各レジストラのポリシも様々です) 1,国際化された表示を無効化し,国際化ドメイン名表示のための符合である punycode で表示するように設定することでさしあたりユーザ側で簡単にフィシング対策ができます。

about:config を開き,
network.IDN_show_punycode」の値を true にしてください。

これで,国際化ドメイン名が punycode で表示されるようになります。先述の「аpple.com」なら「xn--80ak6aa92e.com」と表示され,正規のサイトではないことが一目瞭然になります。
デメリットは国際化ドメイン名がわかりにくくなることですが,それで困る人がいるのかは不明。

Notes:

  1. レジストラが紛らわしいドメイン名の登録を拒否する,Firefox などクリックせずに EV-SSL の組織情報が表示されるブラウザで EV-SSL を利用する等が考えられますが,現実的には難しいでしょうね。