xmonadでダイアログへのフォーカスがループする現象の対策

追記

keepass2のフォーカス問題については,原因はよく分からないものの
xmonad - ArchWikiのJava GUIの問題対策を実施し
最新のxdotoolを入れたら,keepass2のウィンドウは相変わらずフォーカスループするのだが,keepass2 --auto-typeで問題なく自動フィルされるようになった.

export _JAVA_AWT_WM_NONREPARENTING=1

xmonadからkeepass2をWinと同じく左ALT+Ctrl+aで呼び出すのは,こんな感じ.
ただしmodMaskはmod1Mask以外にしている.

-- 省略
    `additionalKeys`
        [ -- 省略
        , ((mod1Mask .|. controlMask, xK_a), spawn "keepass2 --auto-type")
        ]

でも,CPUファンが唸るので,keepass2を常駐させるのは無理ぽ


xmonad で libreoffice をはじめとするダイアログを生成し,自動的にフォーカスをダイアログへうつし,かつ元ウィンドウへのフォーカスはさせない系の動作をするアプリにおいて,ダイアログへフォーカスをうつす処理っぽいものが無限ループみたいな状態に陥って,CPU使用率はぐいぐい向上し,ほとんど操作を受け付けなくなる現象への対策.
sylpheedのダイアログとかでも直ったから,ちょー助かる.
Linux - xmonadでLibreofficeを起動するとフォーカスがループする問題 - Qiita
リンク先の方法で解決.神すぎ.

(略)
import XMonad.Hooks.EwmhDesktops -- フォーカスがループする問題対策
(略)
main = do
  myStatusBar <- spawnPipe "xmobar /home/hoge/.xmonad/.xmobarrc"
  xmonad $ ewmh defaultConfig
    { borderWidth           = 3
    , focusedBorderColor    = colorGreen
    , layoutHook            = toggleLayouts (Full) $ myLayoutHook
    , logHook               = myLogHook myStatusBar
    , modMask               = modm
    , manageHook            = myManageHook
    , normalBorderColor     = colorGray
    , startupHook           = myStartupHook
    , terminal              = "urxvt"
    }   

ubuntuでタッチパッドでミドルクリックする

synapticsのドライバを入れる.
実は,gpointing-device-settingsを入れると,自分の環境に適切なものが入るはず.

$ sudo apt-get install xserver-xorg-input-synaptics

ホントは,/etc/X11/xorg.conf.d/50-synaptics.confとかが自動で入るはずなんだけど,なぜかhadacchiの環境では入らなかったので,手で書く.

Section "InputClass"
    Identifier "touchpad"
    Driver "synaptics"
    MatchIsTouchpad "on"
        Option "TapButton1" "1"
        Option "TapButton2" "3" # 2本指で右クリック
        Option "TapButton3" "2" # 3本指で中クリック
        Option "VertEdgeScroll" "off" # タッチパッドの右の方でスクロールするやつ
        Option "VertTwoFingerScroll" "on" # 2本指スクロール
        Option "HorizEdgeScroll" "off"
        Option "HorizTwoFingerScroll" "on"
        Option "HorizScrollDelta" "-100" # マイナスは逆方向,数値は精度(大きいほどスクロール速度は遅くなる)
        Option "CircularScrolling" "off" # 多分,let's noteとかのくるくる回すスクロールだと思う
        #Option "CircScrollTrigger" "2"
        Option "EmulateTwoFingerMinZ" "40" # ここから下はよーわからん
        Option "EmulateTwoFingerMinW" "8"
        Option "CoastingSpeed" "0"
        Option "FingerLow" "35"
        Option "FingerHigh" "40"
EndSection

ubuntuでデュアルディスプレイ

ノートPCで,HDMIに出力する例を書くよん.
IFはノートPCの画面がeDP1,HDMIの出力がHDMI1とする.
まーあと,そうはいってもちゃんと事前に映るか確認すべきだよねっ☆(テヘペロ

$ xrandr --output HDMI1 --auto

いやいや,ディスプレイには他のワークスペースを出したいのよ.

$ xrandr --output HDMI1 --auto --right-of eDP1

未だd-subが要求されることがあるが,うっかり事前準備してなくで出せなくて焦った.
こーしたら出た.

$ xrandr --output HDMI1 --mode 1024x768 --rate 60.0 --right-of eDP1

よし,プレゼン終わったぜ!
ケーブル抜いても右にディスプレイが残りつづけるから,切断しないとね

$ xrandr --output HDMI --off

ノートPCに入れたUbuntuでACアダプタが抜けたら画面輝度を下げたりする

ubuntu 14.04+xmonad環境で,ACアダプタのON/OFFに合わせて画面の輝度を変更する設定.
ここのDock and Undock Scriptsを参考にやったらできた.
LaptopLidAndDockScripts - Community Help Wiki

ubuntuではacpidは,なんかあんまり使われてないらしく (PowerManagement/Overview - Community Help Wiki)
実際,event=ac_adapter\ ACPI~(以下略) は動作しなかった.

しばらく/etc/acpid/eventsで悪戦苦闘してみたものの,結局はpm-utilsに設定することで解決した.

#!/bin/sh
case $1 in
    false)
        if [ -e /usr/bin/xbacklight ]; then
            DISPLAY=:0 su USERNAME -c "/usr/bin/xbacklight -set 20"
        fi
    ;;
    true)
        if [ -e /usr/bin/xbacklight ]; then
            DISPLAY=:0 su USERNAME -c "/usr/bin/xbacklight -set 5"
        fi
    ;;
esac

Ubuntu on Laptop PCで画面を閉じてもスリープしない

基本的には,ここの通り.Linux - モニターを閉じるとサスペンドされるのを防止 - Qiita

なんだけど,当該設定ファイルを見てみると他にも電源まわりの動作が書かれてるから試してみたら思い通りに動いてくれてハッピー.

HandlePowerKey=suspend
HandleLidSwitch=ignore

電源ボタンでスリープ,閉じてもスリープせず

ibus1.5系をASCIIキーボード+SKK環境で使い易くする

参考

本の虫: iBus 1.5がクソすぎる
iBusがクソになった理由 — KaoriYa

経緯

2年くらい前にこの記事を見た時は,何を言っているのかさっぱり分からなかったが,今なら少しは分かる.
でも,uimを散々使ってみた挙句,uimの変換中文字列がホワイトアウトして表示されなくなる現象 (RequestUim - uim-doc-ja - Japanese Documentation Project for uim - Google Project Hosting) に出くわしてからibusに戻っているのが現状だ.
ちなみにホワイトアウトは,私の環境ではシングルモニタでも出る
uimは,.Xdefaultにurxvtの色設定を書いても,.uimで色定義書いてuim-colorに適用してもだめだったから,私の知識では打つ手なし

まぁ方針の善し悪しは,特定人種の攻撃みたいな様相なのでスルーすることにして,
どうすれば,私の環境で快適に使えるかと試してみた.
あくまでマシになる程度で,快適とまではいかなかったが,文字が見えないよりはマシなので,uimは捨ててibusに乗り換えた.

環境

OS
Ubuntu 14.04
WM
xmonad
IM
ibus
IME
ibus-skk
キーボード
ASCII配列
エディタ
VIM ときどき emacs
VIMの動作するurxvtでちゃんと変換中文字列が表示されて,emacsでは起きないよう設定できることが最低条件

やること

ibus+ibus-skkのインストール
.xprofileで環境変数を設定してibus起動させるとかは,頑張って.
今覚えている範囲なら,これ書いてXかubuntu丸ごとかを再起動しとけばいけるかも.

xmodmap .Xmodmap export XIM=ibus export XIM_PROGRAM=/usr/bin/ibus-daemon export XIM_ARGS="--xim" export GTK_IM_MODULE="ibus" export XMODIFIERS="@im=ibus" export QT_IM_MODULE="ibus" ibus-daemon -d -x
ibusの設定を全ウィンドウで共通化させない
xmonadではツールバーなんて軟弱なものはないので,現在のinput methodを確認する術が,入力してみる,しかない.
不便極まりないので,ウィンドウを起こした時には常に決まった入力モードであって欲しい.
ibus-setupのadvancedでShare the same input method among all applicationsのチェックを外すことで,可能である.
skkの初期モードをLatinにしておく
実は初期モードはLatinなんだけど,Hiraganaに切り替えていたので戻すだけ.
キーボード操作メインのxmonadで初期モードHiraganaは自殺行為だった.
ibus-setupのinput MethodからSKKを選択してPreferencesを押し,Behaviorからinitial input modeをLatinにしておけばOK
ASCIIキーボードで入力できるようにする
ibus-skkのキーマップが106キーボードになっているので,asciiに変更する.
要su権限.
/usr/share/ibus/components/skk.xmlのlayoutをjpからusに変えて再起動か再ログインか,何かすればOK
(追記)インプットメソッドをskkのみにする
skkの中で直接入力できるのに,Englishを残しておく意味はないので,消す.これしないと,英語環境を使ってる時デフォでskkが起きてくれなくてうざい.これをやっても,例えばemacsを起動した時にはddskkを呼ばなくてもasciiの入力はできるし,C-jはLispの実行だし,C-x C-jでddskkが起きる.

結果

ウィンドウを遷移する度に,Latinに切り替わるぜ!
これがWindows機の動作だったらキレてるところだが,ubuntuなら,そんなに違和感ない.
ちなみに,何でか分からんが,.XdefaultsにemacsでuseXIMはfalseだよーとかしなくても,emacsからはibus-skkは呼ばれない.

ubuntuをwindowsマシンの第2パーティションにインストールしようとしてハマった

ハマった環境.

  • SSD+HDD搭載ノートPC
  • C:(SSD)へWindows7インストール済
  • D:(HDD)へデータを格納
  • C:とD:それぞれパーティションを切り直して,C:の後ろに/とswapを,D:の後ろに/homeを入れる
  • 新たに導入したOSはUbuntu Server 14.04.2
  • インストーラはUSBメモリを使用./dev/sdaがUSB,/dev/sdbがC:,/dev/sdcがD:
  • expert installでブートローダはLILOを/dev/sdb2のPBRへ導入
  • MBRのブートローダはMBMを導入.USBへMBM.144を焼いてインストールするが,edit partitionでは0がUSB,1がD:,2がC:だったくせに,install mbmでは1を指定するとC:のmbrに入った
    mbmから/deb/sdb2を指定してliloを起こすも,ディスクを読み込めずプロンプトにinitramfsと表示されるbusyboxが始まる.

原因

USBでインストールしたため,HDDのマッピングがうまくできていなかったこと.
by-idとかで指定してくればいいものを,自動ではやってくれなかった.

対策

  • initramfsの状態で,
    (initramfs) ls /dev/sd*
    (initramfs) ls -l /dev/disk/by-uuid/
    (initramfs) mkdir /mnt
    (initramfs) mount /dev/sda2 /mnt # <-インストール時は/dev/sdb2だったが,今は/dev/sda2
    (initramfs) cd /mnt/etc
    (initramfs) /mnt/bin/ed lilo.conf # <-ラインエディタ.viとか見付けられたら,viでもいい.とにかくエディタで修正する
    
  • lilo.confで,
    - append="root=/dev/sdb2  "
    + append="root=/dev/disk/by-uuid/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  "
    
  • lilo.confに従いブートローダの再構築.ただし,/mntにマウントした状態ではうまく動作しない&busyboxだとエラーを吐くので,
    (initramfs) mv /mnt/dev /mnt/d # <- /devを移動してくるための準備
    (initramfs) mv /dev /mnt # <- 後でchrootする/mnt配下にsdXやdisk/by-uuidがないといけない.シンボリックリンクではchroot後に上に辿れないので,移動するしかない
    (initramfs) ls /mnt/bin/*sh # <- bashとか入ってるか確認.hadacchiはbashでやった
    (initramfs) chroot /mnt /bin/bash # <- chroot後のパスで指定
    # sudo /sbin/lilo # <- rootのプロンプトに見えたけれど,sudoしないと動いてくれなかった
    # exit # <- busyboxへ戻る
    (initramfs) reboot
    

私の環境では,これで通常のubuntuが起き上がってくれた.
あとで,他に不整合が起こってないか確認すること.
といいつつ,/devは起動時に中身を再構築されるっぽいので,/dが残っていることさえ気にしなければ,特に問題ないと思う.