キー入力イベントの可視化

キー入力のトラブル

PCを使っていると,キー入力が思い通りにいかないことがある.
違うキーが入力されるのは,目で見て分かるのでまだマシな方で,何か入力されているのか否かも分からない場合もある.
その場合,キーイベントを拾って出力させるのが良い.

具体的には,HHKBをHHKモードでWindowsでもLinuxでも使う - hadacchi blogという記事のようなことをしていて,
かつremminaでRDP接続をしている時に,hhk上のALT(◇と入れ替えている)を押しても,スタートメニューが開かない(Winキー入力になってない)場合.

Windows側で確認

KT Software - Keymill がシンプルで良い.
ただし,画面の上側にタスクバーを表示させていると,ウィンドウがタスクバーの後ろに起動して,移動できなくなる.

Linux側で確認

xevコマンドを叩く.
起動したウィンドウを閉じようと思うとマウスを動かすとマウスイベントも拾ってしまうので,コンソールのログが流されてしまうのが欠点.

HHKBをHHKモードでWindowsでもLinuxでも使う

環境

ホストOS
Ubuntu 14.04
ゲストOS
Windows 7
VM PF
Virtualbox

要件

  • Windows側
    • CapsLockを使いたくない
      • HHK モードが理想
        • DIP SW 1: OFF, 2:OFF としたい
    • Windowsキーを使いたい
      • Lite 拡張モードにせざるを得ない
        • DIP SW 1: ON, 2: OFF
    • DeleteよりもBackSpaceを使う
      • DIP SW 3:ON
    • 左手でもFnキーが欲しい
      • DIP SW 4:ON
    • AltキーはSpaceの両隣
      • DIP SW 5:ON
    • Wakeupは無効
      • DIP SW 6:OFF
  • Linux側
    • 右Alt(◇と入れ替えたキー,以降は「新右◇」と表記)をxmonadのショートカットキーの起点にしたい
      • Lite 拡張モードの場合,新右◇はSuper_Rなので,mod4あたりを設定に使えば良かった.HHKモードの場合,新右◇はHenkan_Modeであり,modキーに割り当てられていない.

課題

  • HHKモードでWindowsキーを使いたい
  • HHKモードで新右◇をSuper_Rの代用にしたい

対策

キーマップの変更 in Windows
HKLM\SYSTEM\CurrentControlSet\Control\Keyboard Layout へ Scancode Map を設定する.
他に設定がない場合,

0x00000000
0x00000000
0x02000000
0x5ce07900
0x00000000

とする.
ちなみに,0x79=変換キー,0xe05c=右Windowsキー

xmodmap in Linux
xmodmapを設定した上で,xmodmapでロード.

add Mod4 = Henkcan
xmodmap ~/.Xmodmap

補足

両方設定していても,VM上で正しくWindowsキーとして動作する.

追記(2017/1/24)

remminaで接続した先のWindowsに対して,上の設定ではWindowsキーとしての動作をさせられなかったので別の手段を適用してみた.
この場合,上で行なった設定は不要になるので注意.

この辺を参照のこと.
xkbでキーバインドを変更する – Happy My Life
Ubuntu 15.04: キーボードのカスタマイズ設定 - 児童小銃
要点としては,キーが何になっているのかは xev で確認.
henkan_mode はsetxkbmap上は<HENK>.

キーマップの出力
$ setxkbmap -print > ~/.xkb/keymap/mykbd
キーの置き換え設定の記述
partial modifier_keys
xkb_symbols "HenkSuper" {
    replace key <HENK> {[ Super_L ]};
};
キーマップの修正
~/.xkb/keymap/mykbd の xkb_symbolsの項目のの最後に”+kbd_swap(HenkSuper)”を追加する
キーマップの適用
以下を,X起動時のどこかでやれば良い.

xkbcomp -I${HOME}/.xkb ${HOME}/.xkb/keymap/mykbd $DISPLAY

私の場合,xmonadを使っているので,xmonad.hsのstartupHookで

spawn "xkbcomp -I${HOME}/.xkb ${HOME}/.xkb/keymap/mykbd $DISPLAY; xmodmap ~/.Xmodmap

としてみた.
後ろにxmodmapをつけているのは,xkbcompの実行後にxmodmapがデフォルトに戻ってしまって,xmonadのmodキーの設定が外れてしまうため.

結果

ダメだった.
remminaには,相変わらず何も送信できてないっぽい.
他にremminaの設定でRDPのキーボードレイアウトのタブのuse client keyboard mappingをオン/オフ変えてもダメ.
Super_LとSuper_Rと変えてもダメ.
あんまし意味なかった.

追記(2017/2/24)

rdesktopなら,xkb の方の設定でスタートメニューを開くことができた.
.Xmodmapの方は試してないので不明.

rdesktop -g 2560x1440 -a 32 -z -u $(id -un) -p $(cat /path/to/passwordfile) HOSTADDR

Adobe Readerの「最近使用した場所」を保存させない

編集>環境設定>文書 にある 「最近使用した文書にリストする数」を0にすると,開いたファイルの履歴は残らないものの,そのファイルまでのパスは保存される.
パスはレジストリの,
[HKCU\Software\Adobe\Acrobat Reader\11.0\AVGeneral\cRecentFolders]
の配下に「c1」「c2」…「cX」という名前のキーとして作成される.
そこで,cXというキーを全て削除すると,履歴は消える.

履歴を残さないようにするには,以下の手順で,キーに書き込みできなくしてやれば良い.

  1. cRecentFoldersを右クリックして出てくるメニューから,アクセス許可を選択.
  2. 詳細設定,のボタンをクリック
  3. アクセス許可のタブの中の「継承の無効化」ボタンをクリックし,削除を選択
  4. 開いている2つのダイアログ両方のOKを押して設定保存して終了

Windows 7 で Windows 10 へのアップグレードを薦める通知を削除する

webで出て来るやり方 (ASCII.jp:トラブル回避! 「Windows 10を入手する」を消す方法!とか,「Windows10を入手する」の通知が消えない\(^o^)/ - time 0 and 1など) に加えて,私はGWXフォルダを消し損ねたので,ちょっと手をかけてみた.
正直,このワームを防ぐには,Windows Updateを無効化した方が早いんじゃないかという気がしている.

  • 上の記事にあるアップデート(KB3035583,KB2952664)は,最低限,消しておく.
  • セーフモードで起動(再起動後にF8を連打してセーフモードを選択)
  • (私はexplorer.exeを管理者権限で開いたが,そんな手間はいらないかも?分からないので,うまくいかんかったら試してね)
  • C:\Windows\System32\GWXを右クリック>プロパティ>セキュリティタブ>詳細設定>所有者,と辿り所有者を自分に変更してプロパティを一旦閉じる.
  • 再度,プロパティを開き,セキュリティタブ>詳細設定>アクセス許可の変更>このオブジェクトの親から継承可能なアクセス許可を含める,のチェックボックスを外す.
  • 出てくるダイアログボックスは,削除でも追加でもいいので選択し,適当に答えながら,プロパティを全部閉じる.
  • GWXフォルダ自体をShift+Delで削除する
  • C:\Windows\System32のフォルダの中の何もないところを右クリックして,新規作成>テキストドキュメントを選択し,ファイル名をGTXとする.
  • GWXを右クリックし,上と同じ要領で所有者を自分に変更,親からの継承のチェックボックスを外し,ダイアログで「削除」を選択.
  • 再起動して,普通に使う

ここまでやっても,Windows updateの最初に出てくる「Windows-10にアップグレード」,は実体が複数種類あるので,3回くらい非表示にしないと,また出てくるので注意すること.

GWXはフォルダとして作成してもいいんだけど,Winとかlinuxは同じフォルダに同じ名前のファイルとフォルダを作れないのを利用して,アクセスコントロールが分かりやすいファイルを作って書き込み禁止にすることにした.

今のところ,これでうまくいっているが,これでもだめな場合の方針はファイル暗号化を有効にしてGWXを暗号化した後に暗号化用の証明書を削除して復号できなくしてしまうとか…

Sylpheed Pro 2.5.0で波線を入力するとUnicodeに変換していいか聞かれる問題の対処

ここにある問題が原因と思われる → 文字コード - 波ダッシュ、全角チルダ問題まとめ - Qiita
要するに,JISにない文字コードの文字が入力されていて,JISに変換して送信できないということなのだと思う.

skkでz-などでこの波線を入力しようとすると,全角チルダが入力され,それがJISに変換できないのが原因だと理解することにして,z-で入力される文字をU+301Cに変更してみた.
巷で評判のskkfep(私が使うのは20140826版)の場合,設定をsetting.js→「設定」→「詳細」→357行目を「〜」にする.
327行目は,全角英数モードでのチルダ入力だと思うので,こっちは元のままにしておいた.
ちなみに「〜」をそのまま入力して保存しようとすると,ANSI形式でskkrule.txtが保存できないぜ,って怒られるし,unicodeに変換して保存してどこにどんな動作影響が出るか分かんないので,やめといた方が無難だと思う.

あふwでmd5sumを実行してメッセージ枠に結果を出力する

お気に入りのツールを気ままに拡張するブログ で公開されているafxtoolsに同梱のafxamsを使う.
afxtoolsをGitHubからDLして,afxtoolsというフォルダをafxwと同じフォルダに展開した状態,かつcygwinの実行ファイル群にパスが通っている前提.

何故か,直接実行ではうまくいかなかったので,バッチファイルを挟む.
afxwと同じフォルダへ適当な名前(pmd5sum.batとする)のバッチファイルを作成して,

md5sum.exe %1 | xargs.exe c:\path\to\afxw\afxtools\bin\afxams.exe MesPrint

続いて,あふwの設定ダイアログのプログラムタブのShift-Xとかに,

%afxw%\pmd5sum.bat "$P\$F"

とかすれば,Shift-Xでカーソル下のファイルのmd5sumがメッセージ枠に出るはず.

ドライブレターへの割り当て

Windows上のあるフォルダをドライブレターへの割り当てをしようとすると,

 >subst F: C:\path\to\folder

みたいにすることになるが,再起動すると割り当てが解除される.
解除されないためには,レジストリにエントリを追加する.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices]
"F:"="\??\C:\path\to\folder"

ネットワークドライブをドライブレターへ割り当てしようとすると,

 >net use F: \\servername\sharedname

なぜかこの場合は,永続的に割り当てされる.

syskey のパスワード入力を辞める

Windows OSで,syskey.exeを使って暗号化を有効化し,「パスワードスタートアップ」を設定すると,Windows起動時にパスワード入力を求められる.
Windowsタブレットでキーボードを使わずに運用していると,syskeyのパスワード入力画面でソフトキーボードが起動せず,OSを立ち上げられない事態に陥る.
で,syskeyのパスワード入力画面を出さないようにするにはどうすれば良いか.

  1. syskey.exe を起動
  2. 「更新」
  3. 「システムによって自動生成されるパスワード(S)」
  4. 「ローカルにスタートアップキーを保存する(L)」
  5. 「OK」

Google Chrome でフォントのアンチエイリアシングが効かなくなった時の対処

色々あるらしいし,今後も起こりそうなので,追記前提で記事を書く.

2015/4/1時点で,アドレスバーなどに入力した文字がギザギザで気付いた時の対処法

chrome://flags/#lcd-text-aa を開いて,「LCD テキストのアンチエイリアス」を有効化する.

設定項目を見て思い出したが,この直近に,接続しているLCDを変えた.
それが原因か?