みんな大好きTEMPer
入手性も良く、安価なUSB温度計Gold TEMPerだが、自分が入手したV1.4では、こんなエラーが出まくる。
$ dmesg
Oct 06 19:35:08 arch kernel: input: RDing TEMPerV1.4 as /devices/pci0000:00/0000:00:15.0/usb1/1-7/1-7:1.0/0003:0C45:7401.002C/input/input35
Oct 06 19:35:08 arch kernel: hid-generic 0003:0C45:7401.002C: input,hidraw1: USB HID v1.10 Keyboard [RDing TEMPerV1.4] on usb-0000:00:15.0-7/input0
Oct 06 19:35:08 arch kernel: hid-generic 0003:0C45:7401.002D: hiddev1,hidraw2: USB HID v1.10 Device [RDing TEMPerV1.4] on usb-0000:00:15.0-7/input1
Oct 06 19:35:08 arch systemd-logind[397]: Watching system buttons on /dev/input/event2 (RDing TEMPerV1.4)
ググった感じではどうしようもなさそうだったのと、ログも汚れるので、湿度も取れるEasyLog EL-USB-RTでやってみよう。
…え、Linux用ソフトのソースが無い?
Linux用ソースと環境
こちらのソースをありがたく使わせていただく。
libhidが必要とのこと。
libhid
だいぶ古く、Ubuntuからも消えている模様。
…が、ArchLinuxにはAURで入れられる模様。
AURによるlibhidのインストール
$ git clone https://aur.archlinux.org/libhid.git
$ cd libhid
$ makepkg -si
…で入るはずが、失敗。
どうも、PKGBUILD
にあるsource
の取得に失敗している模様。
原因は後ほど。
回避策
PKGBUILDのsourceを書き換える
source=("https://alioth-archive.debian.org/releases/libhid/libhid/$pkgver/$pkgname-$pkgver.tar.gz")
としたら、うまく行った。
置き場所が変わったり、debian.orgのDNSレコードが変わったら、ダメになるかもしれない。
/etc/systemd/resolved.confを書き換える
DNSSEC=false
にする。
他のDNSクエリーのDNSSEC署名検証も、Offになってしまう。
/etc/nsswitch.confを書き換える
hosts:
にあるresolve
をdns
にする。
/etc/resolv.confが正しく設定されていることが前提になると思われる。
systemd-resolvedを止める
# systemctl stop systemd-resolved
で止める。
/etc/nsswitch.confのhosts:
にdns
があり、/etc/resolv.confが正しく設定されていることが前提になると思われる。
Linux用ソースのビルド
libhidが入ったら、後は簡単。
$ git clone https://github.com/rca/lascar-usb-thermometer.git
$ cd lascar-usb-thermometer
$ make
$ sudo ./usb_termometer
temp: 25.6, hum: 58.5
makepkgが失敗した原因
PKGBUILD
のsource
にあるdistcache.FreeBSD.org
の名前解決に失敗している。
このホスト名のドメインFreeBSD.org
は署名されているが、ホスト名はCNAMEとなっており、CNAME先のホスト名のドメインgeo.FreeBSD.org
は署名されていない模様。
これをsystemd-resolvedは署名検証失敗としているようだ。
$ drill @127.0.0.53 distcache.FreeBSD.org
;; ->>HEADER<<- opcode: QUERY, rcode: SERVFAIL, id: 30015
:
# journalctl -u systemd-resolved -e
Oct 08 01:28:30 arch systemd-resolved[9360]: DNSSEC validation failed for question distcache.FreeBSD.org IN A: invalid
なお、Google Public DNSは署名検証しているとのことだが、systemd-resolvedとは動きが異なり、エラーにならない。
$ drill @8.8.8.8 distcache.FreeBSD.org
;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 9977
:
宿題
- 他のHIDライブラリへの載せ替え
- 温度計とは無関係の、CNAMEが別ドメイン時の署名検証のRFC調査
ツッコミ
- RPi + そのへんのセンサーのほうが安い?
- 新しいTEMPerは?
参考文献
- Solaris de USB温度計…最近のTEMPer事情が分かる
- 127.0.0.53:53 って 誰が 使ってるの?…自分が使っていることに気づきませんでした
- systemd-resolved.service