定番WMなし、qtileでラップトップをいい感じに使う
Environments
ボタン・ふたでSuspend
/etc/systemd/logind.conf
の [Login]
中の項目を設定。Linux Man Pages: logind
$ cat /etc/systemd/logind.conf [Login] HandlePowerKey=suspend HandleLidSwitch=suspend
Suspend時にロック
screen lockにi3lockを使う。i3lockを起動するsystemd unitでbeforeを指定する。
$ cat /lib/systemd/system/wakelock.service [Unit] Description=Lock the screen on resume from suspend Before=sleep.target suspend.target [Service] User=YOUR USER NAME Type=forking Environment=DISPLAY=:0 ExecStart=/usr/bin/i3lock [Install] WantedBy=sleep.target suspend.target $ systemctl daemon-reload $ systemctl enable wakelock.service
suspend 一定時間後 hibernate
以前はここにpm-utilsを使用する方法を書いていたが、動かなかったのでsystemdを使うようにする。i3lock 2.8 (debian 9のリポジトリから手に入るもの) だとハイバネート復帰後カーネルパニックを起こしたので、 2.12を使うようにしたところうまく動いている模様。
$ cat /usr/sbin/delayed_hibernate.sh #!/bin/bash TIMELOG=/tmp/autohibernate.log ALARM=$(tail -n 1 $TIMELOG) SLEEPTIME=10 #edit this line to change timer, e.g. 2 hours "$((2*60*60))" if [ $1 == "resume" ] then if [ $(date +%s) -ge $(( $ALARM + $SLEEPTIME )) ] then echo "hibernate triggered $(date +%H:%M:%S)">>$TIMELOG systemctl hibernate 2>> $TIMELOG else echo "normal wakeup $(date +%H:%M:%S)">>$TIMELOG fi elif [ $1 == "suspend" ] then echo "$(date +%s)" >> $TIMELOG /usr/sbin/rtcwake -m no -s $SLEEPTIME fi
$ cat /lib/systemd/system/delayedhybernate.service [Unit] Description=Delayed hibernation trigger Before=suspend.target Conflicts=hibernate.target hybrid-suspend.target StopWhenUnneeded=true [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/sbin/delayed_hibernate.sh suspend ExecStop=/usr/sbin/delayed_hibernate.sh resume [Install] WantedBy=sleep.target RequiredBy=suspend.target
i3lockなしなら問題なく動くが、(おそらく)i3lock追加後にhibernate復帰すると下記メッセージが現れる。
Message from syslogd@debian-thinkpad at Jan 3 08:36:00 ... kernel:[ 1079.913130] Uhhuh. NMI received for unknown reason 2c on CPU 0. Message from syslogd@debian-thinkpad at Jan 3 08:36:00 ... kernel:[ 1079.913135] Do you have a strange power saving mode enabled? Message from syslogd@debian-thinkpad at Jan 3 08:36:00 ... kernel:[ 1079.913138] Dazed and confused, but trying to continue
WLanの情報をBottom Barに
WLANじたいはwicdで管理している。 - pythonのiwlibのビルドのためlibiw-devをいれる - pipでiwlibをいれる
$ sudo apt install libiw-dev $ pip3 install iwlib
うごかん (N/A)
BacklightをFunction Keysで
xbacklightが動かないのでバックライトデバイスのsysfsを直接編集するようにする。はじめは一般ユーザで書き込めないので、それを変更するudevルールを書く。 https://wiki.archlinux.org/index.php/backlight 今回の場合はデバイスがacpi_video0ではなくintel_backlightなのでそこを置換する(このあたりの意味がよくわかっていない)。
cat /etc/udev/rules.d/99-backlight.rules ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="intel_backlight", RUN+="/bin/chgrp video /sys/class/backlight/%k/brightness" ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="intel_backlight", RUN+="/bin/chmod g+w /sys/class/backlight/%k/brightness"
あとはqtile configを書く。現在値を読み込みそれにある程度値を足して再度書き込むコマンドを作る。
echo $((`cat /sys/class/backlight/intel_backlight/brightness`+10)) | tee sys/class/backlight/intel_backlight/brightness
lazy.spawn()
にこれを書けばいいのかと思ったがうまくごかない。ttyが割り当てられていなくてパイプが機能しないのだろうか(わからない)。同コマンドをファイルにして/usr/local/binに起き、+xしてlazy.spawn()の引数に書く。
低バッテリでhibernate
たぶんこれ (未検証) 2019-08-02追記: うごいてないのを確認。udevadmでちゃんと見てコンフィグを書く
https://wiki.archlinux.org/index.php/laptop#Hibernate_on_low_battery_level
バッテリチェックするスクリプトを作る
$ cat /usr/local/bin/hibernateonlowbattery.sh #!/bin/sh acpi -b | awk -F'[,:%]' '{print $2, $3}' | { read -r status capacity if [ "$status" = Discharging -a "$capacity" -lt 5 ]; then logger "Critical battery threshold" systemctl hibernate fi }
systemd.timer にあずける
$ cat /lib/systemd/system/hibernateonlowbattery.service [Unit] Description=Hibernate when low battery [Service] Type=oneshot ExecStart=/usr/local/bin/hibernateonlowbattery.sh
$ cat /lib/systemd/system/hibernateonlowbattery.timer [Unit] Description=Hibernate when low battery [Timer] OnBootSec=10min OnUnitActiveSec=2min Persistent=false [Install] WantedBy=timers.target
Fonts
Noto Fontsをインストール
packageにあるものはaptでインストール (Sans CJKはある)
sudo apt install fonts-noto*
ないものはGoogleからダウンロードインストール
~/.fonts.conf
を編集 (Seeman fonts-conf
)
<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <!-- $XDG_CONFIG_HOME/fontconfig/fonts.conf for per-user font configuration --> <fontconfig> <!-- <match target="scan"> <test name="family"> <string>Noto Color Emoji</string> </test> <edit name="scalable" mode="assign"> <bool>true</bool> </edit> <edit name="pixelsize" mode="assign"> <double>18</double> </edit> </match> <match> <test name="family"><string>sans-serif</string></test> <edit name="family" mode="prepend" binding="strong"> <string>Noto Color Emoji</string> </edit> </match> <match> <test name="family"><string>serif</string></test> <edit name="family" mode="assign" binding="strong"> <string>Noto Color Emoji</string> </edit> </match> <match> <test name="family"><string>Apple Color Emoji</string></test> <edit name="family" mode="assign" binding="strong"> <string>Noto Color Emoji</string> </edit> </match> --> <alias binding="strong"> <family>emoji</family> <default><family>Emoji One</family></default> </alias> <alias> <family>sans</family> <prefer> <family>Noto Sans CJK JP</family> </prefer> </alias> <alias> <family>serif</family> <prefer> <family>Noto Serif CJK JP</family> </prefer> </alias> <alias> <family>sans-serif</family> <prefer> <family>Noto Sans CJK JP</family> </prefer> </alias> <alias> <family>monospace</family> <prefer> <family>DejaVu Sans Mono</family> </prefer> </alias> <alias> <family>sans-serif</family> <prefer><family>Noto Color Emoji</family></prefer> </alias> </fontconfig>
fc-cache -f
Trackpoint
速度を早める
TL;DR
systemdのpathexistsでなんとかする
以下udevによるものは間違い
$ cat /etc/udev/rules.d/10-trackpoint.rules ACTION=="add", SUBSYSTEM=="serio", DRIVERS=="psmouse", ATTR{name}=="TPPS/2 IBM TrackPoint", ATTR{sensitivity}="255", ATTR{speed}="255"
ruleのかきかた
trackpointのデバイスを探す。/dev/input/mouse{0,1,2,3}
に割り当たっていることが予想ついたので udevadm info -q path -n /dev/input/mouse{0,1,2,3}
して/sys以下の記述を探し、devadm info -a -p ${syspath}
になげ、trackpointという記述があるところを探す。つまり、 udevadm info -a -p $(udevadm info -q path -n /dev/input/mouse{0,1,2,3})
の中でtrackpointと名前がつくものを探す。今回はmouse2がtrackpointだったので、udevadm info -a -p $(udevadm info -q path -n /dev/input/mouse1)
とする。
↑で出てきた情報でデバイスを絞り込むキーを絞る。KERNELS, SYSSYSTEMS, DRIVERS, ATTRS{name}で絞り込めそうだと判断したので、ruleファイルの条件部にそれをかく。sensitivityとspeedを調整したいので、それを書き込む。
Touchpad
タッチでクリック、感度最大
libinputを使う。xinputから設定できる項目を確認。
$ xinput list ⎜ ↳ SynPS/2 Synaptics TouchPad id=13 [slave pointer (2)]
id=13なので、
$ xinput list-props 13
libinput Tapping Enabled
あたりかなとあたりをつける
man libinput
と man xorg.conf
を読むなどして、/etc/X11/xorg.conf.d/99-libinput-custom-config.conf
に
Section "InputClass" Identifier "TouchPad" MatchDriver "libinput" MatchProduct "TouchPad" Option "Tapping" "yes" Option "TappingDrag" "yes" Option "AccelSpeed" "1.0" Option "AccelProfile" "flat" EndSection