Environments
- Thinkpad X Yoga
 - Debian Stretch (Linux 4.9.0)
 - qtile 0.12.0
- python 3.5.3
 
 - i3lock 2.12
 
ボタン・ふたで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からダウンロードインストール
 
 - packageにあるものはaptでインストール (Sans CJKはある)
 ~/.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