15を超えるファイルを選択してもコンテキストメニューが省略されないようにする

OS: Windows 10 ver 1709
Excel 2016

夥しい数のエクセルファイルを一遍に選択して印刷しようと右クリックをしたところ「印刷」のメニューが見当たらない。僅かな数であれば印刷メニューがあらわれるのでこれは閾値が定められていると考えて調べると、デフォルトでは15ファイルまでという設計である。此れを超えると「開く」、「印刷」、「新規」のメニューが省かれるという情勢である。

15個のエクセルファイルを選択したときのコンテキストメニュー
16個のエクセスファイルを選択したときのコンテキストメニュー

この数を操作したいのであれば次のレジストリを作成、編集するとよいようである。

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer
Name : MultipleInvokePromptMinimum
Type : DWORD

コマンドプロンプトから一息に操作してしまうならこういう具合である。このあとエクスプローラを再起動すると反映された。

>reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer" /v MultipleInvokePromptMinimum /t REG_DWORD /d 16 /f

10進数で16以上の値を放り込むとファイルの選択数に依らずコンテキストメニューがかいつまんで表示されることは無くなった。一方で操作できるファイルの数はこのレジストリの値にどうしても制限されるようである。MultipleInvokePromptMinimumに20をセットしたとすれば、ファイルを100選択してもメニューに「印刷」は表示されるけれども実際には1ファイル印刷して終いであった。なんと素直でない作りであるなとおもったけれども手も足も出ない。

参考:
Context menus are shortened when more than 15 files are selected

コンソール画面に画像を表示する

Raspberry Pi 3 Model B
OS: Raspbian stretch lite November 2017

連邦捜査局みたような名前のコマンドを使えば実現可能であった。

$ sudo apt install fbi
$ sudo fbi -T 1 -a keshiki.JPG
using "DejaVu Sans Mono-16", pixelsize=16.67 file=/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf

sshで接続している際に連続してfbiコマンドを実行してしまうとkillallでfbiプロセスを仕留めてももはやコンソール画面から画像が消えることはなかった。よそのターミナルへコマンドを送る大変便利なユーティリティを拝借してqキー押下をコンソールへ送信し事なきを得たがこれには閉口した。

参考:
Utility to Send Commands or Data to Other Terminals (tty/pts)

コンソール画面のスクリーンショットを撮影したい

Raspberry Pi 3 Model B
OS: Raspbian Stretch lite November 2017

キーボードもマウスもディスプレイも接続されていないRaspberry Pi 3なのである。コンソール画面の様子を確認したいのであるが現場へ赴きディスプレイを接続するのは大変な手間であるからどうしても遠隔地から確認する術が必要である。fbcatパッケージを導入するのがよいようである。

$ sudo apt install fbcat

あとはfbgrabコマンドを実行することでフレームバッファの中身をPNG画像として拵えてくれる。何のエラーもあらわれないのに真っ黒な画像しか得られない場合はコンソール画面が消灯している為である可能性が高いからまずはsettermで画面をつついてからスクリーンショットを撮影するが良さそうであった。

$ sudo fbgrab -c 1 -d /dev/fb0 -i screenshot.png
pnmtopng: 193 colors found

$ file screenshot.png
screenshot.png: PNG image data, 1920 x 1200, 8-bit colormap, interlaced

表示されている文字を手っ取り早く見届けるだけなら/dev/vcsを覗き見るという方法もあるようである。

$ sudo cat /dev/vcs | fold

参考:
jwilk/fbcat
Can I take a screenshot of a virtual console?
Linux framebuffer

Write failed: Broken pipeでssh接続が切断されるのを防ぐ

sshで接続したあと操作せずに一晩捨ておくと知らぬ間に「Write failed: Broken pipe」というメッセージが表示されてセッションが切断されている。再度、接続し直すのも手間であるから設定を取り繕って切断されぬようにするものである。

$ vi ~/.ssh/config
Host *
  ServerAliveInterval 30
  ServerAliveCountMax 10

ServerAliveIntervalはサーバからデータが送られてこなくなってから何秒後に応答を求めるメッセージを投げつけるか定める模様である。デフォルトではそもメッセージを放たないという。メッセージの中身をtcpdumpで覗いてみるとPSHフラグを立てたパケットを送りつけているようであった。

$ sudo tcpdump -n -i ens3 port 22
(snip)
22:50:30.488309 IP 192.0.2.1.55773 > 153.121.51.164.22: Flags [P.], seq 72:108, ack 109, win 305, options [nop,nop,TS val 1047147664 ecr 177098205], length 36
22:50:30.488696 IP 153.121.51.164.22 > 192.0.2.1.55773: Flags [P.], seq 109:145, ack 108, win 309, options [nop,nop,TS val 177105717 ecr 1047147664], length 36
22:50:30.506156 IP 192.0.2.1.55773 > 153.121.51.164.22: Flags [.], ack 145, win 305, options [nop,nop,TS val 1047147668 ecr 177105717], length 0

22:51:00.536025 IP 192.0.2.1.55773 > 153.121.51.164.22: Flags [P.], seq 108:144, ack 145, win 305, options [nop,nop,TS val 1047155176 ecr 177105717], length 36
22:51:00.536334 IP 153.121.51.164.22 > 192.0.2.1.55773: Flags [P.], seq 145:181, ack 144, win 309, options [nop,nop,TS val 177113229 ecr 1047155176], length 36
22:51:00.554444 IP 192.0.2.1.55773 > 153.121.51.164.22: Flags [.], ack 181, win 305, options [nop,nop,TS val 1047155180 ecr 177113229], length 0
(snip)

ServerAliveCountMaxはサーバからの反応が無くなった際、応答を呼びかけるメッセージを何回送りつけるかを定め、これを超えたら切断してセッションを終える模様である。デフォルトでは3回という取り決めであった。したがって概ね

ServerAliveInterval ✕ ServerAliveCountMax

秒の間、サーバから返答がなければTimeout, server hostname not responding.というようなメッセージと共に切断するというものである。

参考:
man ssh_config
How to prevent “Write Failed: broken pipe” on SSH connection?

消灯したコンソール画面を点灯させる

Raspberry Pi 3 Model B
OS: Raspbian stretch lite November 2017

キーボードもマウスも接続されていないRaspberry Pi 3にディスプレイだけが接続されている。デフォルトでは600秒でコンソール画面が消灯するようセットされているから起動して10分が経過するともはや何も見えない。

$ cat /sys/module/kernel/parameters/consoleblank
600

時にはコンソール画面の表示を拝見したいことがあるけれどもわざわざキーボードやマウスを接続するのも手数がかかるのでそういうときはsshで接続してこうである。

$ sudo su -c "setterm --term linux --blank 10 > /dev/tty1"

これで消灯していたディスプレイに灯が入った。blankの数値は0~60まで分単位で指定するようである。この内、0は決して消灯してはならぬという指示になる。或いは--blank pokeオプションを用いて次のようなコマンドを実行してもよろしい。

$ sudo su -c "setterm --term linux --blank poke < /dev/tty1"

点灯させたは良いがやはり今すぐ消灯させたいならば--blank forceである。此れはキーボードやマウス操作をしたとて消灯が解消されるものではなくなるから今後は手探りで操作するか再び--blank pokeで点灯するか選択を迫られるところである。

$ sudo su -c "setterm --term linux --blank force < /dev/tty1"

ところで以前はsettermのオプションはハイフン一つだった気がするけれども近頃はハイフン二つをサポートするようになったことに気がついた。

COMPATIBILITY
Since version 2.25 setterm has support for long options with two hyphens, for example --help, beside the historical long options
with a single hyphen, for example -help. In scripts it is better to use the backward-compatible single hyphen rather than the
double hyphen. Currently there are no plans nor good reasons to discontinue single-hyphen compatibility.

なおRaspberry Piを再起動しても永続的に消灯時間を指定するならコマンドラインオプションでconsoleblankを引き渡せばよいということである。単位は秒であった。

$ sudo vi /boot/cmdline.txt
#dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=fb9e6cf7-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=fb9e6cf7-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait consoleblank=0

settermコマンドのblankオプションと違ってconsoleblankはどうやら60分が上限では無い模様であり莫大な数値を指定しても受け入れた。然し乍ら1億5千万を超えたあたりから起動時のメッセージが表示されずラズベリーが四つ並んでいる画面しか表示されなくなったので無闇に大きな値を放り込むのは良くないと思った。

$ cat /sys/module/kernel/parameters/consoleblank
150000000

参考:
How do I prevent the screen from going blank?
The Kernel Command Line - Raspberry Pi Documentation