RUPC2019参加記

写真はない 記憶もあんまりない

-82日目

  • 学会で知り合った @medalotte さんが最近競技プログラミングを始めたと言ってるのでRUPCに誘う 行けたら行くって言ってた気がする

1日目

  • @medalotte さんと再開する
  • @Pulmn さんと @medalotte さんと組む
  • Bを読む。なるほど関数定義して再帰的に呼び出せばいいねなどとプチ迷走をするがすぐにまともで確実な解法を書いてACする。
  • Dを読む。再帰的なウニをつくるとO(logN)で正解できると考える。Plumnさんが空いたところで解法を共有するとよさそうと言ってくれたので実装してみる。
  • すごくバグって困る。Plumnさんが介護してくれて時間ギリギリでなんとかACする。
  • あとできいたらbitが立っているかどうかわかるようにグラフをつくると楽だときいて感心する。
  • 初参加のmedalotteさんにちゃんと気を使おうと思っていたのにDで盛り上がってしまってちょっと反省する。
  • 懇親会でmedalotteくんと話す。何を話したかは覚えていない。適当に知らない人に話しかけたりもする。何を話したかは覚えていない。

2日目

  • @kyuridenamida さんと @nomikura さんと組む
  • Aを解く。'A' + (max_element(A.begin() + A.end()) - A.begin())する。
  • Dを読む。サンプルをみると自分の解釈と合わなくて困る(整数要素は見逃さなかった)。会津セット日本語が最悪だ、まあ僕が文章校正してないからねとイキる。実は日本語もサンプルも間違っておらず、誤読もしていなかった(サンプル1がちょっと特殊?で、上辺を超えて線を引いたほうが最適だったっぽい)。これ多分ヤバイっすよとチームに共有して、飛ばす。後にnomiさんがsampleの全探索をしてくれて、問題がおかしくないことを確認しACしてくれた。
  • いろいろよむがわからないなぁをやっていたところkyuriさんがGがgrundyで解けそうなんだけどgrundy解いたことあれば実装してほしいと言ってくれる。grundyはB2くらいのころに教わって証明もどきをやって解いたことがあったので、自信満々で任せられる。が、完全に忘却していたので結局kyuriさんに実装を教えてもらいながらAC。恥ずかしかった。
  • Jが本質高校物理っぽいので成績優秀者としても解きたいなぁと思う。kyuriさんが後半はむずかしい区間スケジュールであることを考察してくれたので、kyuriさんにそっちを任せ、僕は高校物理をやる。5回くらい式を間違えてバグらせたが、終わり間際でなんとかサンプルが合って提出する。WA。聞いたところ本質は誤差なんだって。hajiくんがEPS=2e-8とかにすると通るよとか教えてくれる。通らなかったけど。
  • 懇親会はよく覚えていない。グラスにいっぱい注いだハイボールがほぼストレートだったことは覚えている。

3日目

  • @ferinさんと@shiroさんと組む。
  • Bを読む。i番目の入力でそれ以左の括弧列はきまるから頑張って場合分けをするといいのかななどと考えていた。ferinさんに解法を共有すると、もう少しかんたんにできそうだと考えてくれて、最終的にstackでやるやつを教わる。何度かバグらせferinさんのお世話になりながらもACする。
  • 終わったところでferinさんにDの考察を教えてもらい、実装したかったので実装させてくださいという。教えてもらったものを理解できてなかったようでやたら迷走したが、最終的にはferinさんに付き添ってもらってAC。
  • ferinさんがEを解く。時間もあまりなかったし解けそうな問題もなかったので眺めていた。ローリングハッシュとか使ったことないなあと思いながら眺めているも、時間切れ。

まとめ

今年は忙しくてなかなか原案を出せず、ひねりだした原案もhajiくんに「つまんな」と言われ結局コンテスタントとして参加しました。作問できなかったのはちょっと心残りではありましたが、競プロは楽しいねと言うのを再確認できた合宿だったと思います。

定番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

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ルールを書く。 Backlight - ArchWiki 今回の場合はデバイスが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

たぶんこれ (未検証) Laptop - ArchWiki

Fonts

  • Noto Fontsをインストール

    • packageにあるものはaptでインストール (Sans CJKはある)

      • sudo apt install fonts-noto*
    • ないものはGoogleからダウンロードインストール

  • ~/.fonts.conf を編集 (See man 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

NVIDIAのGPUとドライバが入ったLinux (Debian) マシン上でrvis (ROS kinetic) をDockerを介して実行する

[注: 未解決]

環境

問題

Dockerを介してrviz (おそらくopenGLを使うアプリケーション全て) をウィンドウを使いつつ表示させるにはいろいろ必要条件がある

やったこと

  • nvidia-dockerを使うようにした (1) (3)
  • NVIDIAのドライバを入れ直した (2)
  • NVIDIA DriverをDocker Imageにもインストール

nvidia-dockerを使うようにした (1) (3)

基本的には (3) の通り。ROS用にDockerfileを書き換えた。

FROM ros:kinetic-ros-base

ENV NVIDIA_VISIBLE_DEVICES ${NVIDIA_VISIBLE_DEVICES:-all}
ENV NVIDIA_DRIVER_CAPABILITIES ${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics

RUN apt update && apt install -y \
    x11-apps \
    mesa-utils \
    gdb \
    ros-kinetic-rviz

CMD ["rosrun", "rviz", "rviz"]
docker run --runtime=nvidia --rm -it --cap-add=SYS_PTRACE --security-opt="seccomp=unconfined" --net host -e QT_X11_NO_MITSHM=1 -e DISPLAY=$DISPLAY -v $HOME/.Xauthority:/root/.Xauthority -v /tmp/.X11-unix/:/tmp/.X11-unix/ ros-rviz /bin/bash

--cap-add=SYS_PTRACE --security-opt="seccomp=unconfined"GDBによるデバッグに必要らしい(プログラムアドレスがセキュリティの関係でいじられるのを防ぎtrace出来るようにするらしい)。

-e QT_X11_NO_MITSHM=1X Error: BadAccess [...]が出るのでつけた (4)。

しかしnvidia-docker2を使い始めた途端コンテナがinitialization error: driver error: failed to process request\\\\n\\\"\"": unknown.で起動しない。

NVIDIAのドライバを入れ直した (2)

(2)を参考に、sudo nvidia-container-cli -k -d /dev/tty infoの結果が良くなかったのでホストのドライバが良くないと判断。以前はNVIDIAのページから得られる.runからインストールした。aptでnvidia-driversをinstall(推奨されません)。xserver-xorg-video-nvidiaがdependenciesを崩すというので手動で依存解決(aptするだけ)。いろいろ消えると言われるがこの頃は完全にしんどくなっていたのでとりあえずY。rebootしてXを起動すると入力機器が何も受け付けなくなった。(5)を参考にxserver-xorg-input-allのインストールで解決した。

コンテナは起動した。しかし

# ROS_MASTER_URI=http://xxx:11311 rviz
[ INFO] [1549507151.920337704]: rviz version 1.12.16
[ INFO] [1549507151.920376105]: compiled against Qt version 5.5.1
[ INFO] [1549507151.920386034]: compiled against OGRE version 1.9.0 (Ghadamon)
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
Could not initialize OpenGL for RasterGLSurface, reverting to RasterSurface.
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
Segmentation fault (core dumped)
# ROS_MASTER_URI=http://163.143.94.197:11311 gdb rviz
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from rviz...(no debugging symbols found)...done.
(gdb) r
Starting program: /opt/ros/kinetic/bin/rviz
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7fffdda6f700 (LWP 85)]
[ INFO] [1549507206.675844716]: rviz version 1.12.16
[ INFO] [1549507206.675877843]: compiled against Qt version 5.5.1
[ INFO] [1549507206.675886056]: compiled against OGRE version 1.9.0 (Ghadamon)
[New Thread 0x7fffdce4e700 (LWP 86)]
[New Thread 0x7fffd7fff700 (LWP 87)]
[New Thread 0x7fffd77fe700 (LWP 88)]
[New Thread 0x7fffd6ffd700 (LWP 89)]
[New Thread 0x7fffc3fff700 (LWP 91)]
[New Thread 0x7fffc37fe700 (LWP 92)]
[New Thread 0x7fffc2ffd700 (LWP 93)]
[New Thread 0x7fffc27fc700 (LWP 94)]
libGL error: No matching fbConfigs or visuals found
[Thread 0x7fffc27fc700 (LWP 94) exited]
[Thread 0x7fffc2ffd700 (LWP 93) exited]
[Thread 0x7fffc37fe700 (LWP 92) exited]
[Thread 0x7fffc3fff700 (LWP 91) exited]
libGL error: failed to load driver: swrast
Could not initialize OpenGL for RasterGLSurface, reverting to RasterSurface.
[New Thread 0x7fffc27fc700 (LWP 95)]
[New Thread 0x7fffc2ffd700 (LWP 96)]
[New Thread 0x7fffc37fe700 (LWP 97)]
[New Thread 0x7fffc3fff700 (LWP 98)]
libGL error: No matching fbConfigs or visuals found
[Thread 0x7fffc3fff700 (LWP 98) exited]
[Thread 0x7fffc37fe700 (LWP 97) exited]
[Thread 0x7fffc2ffd700 (LWP 96) exited]
[Thread 0x7fffc27fc700 (LWP 95) exited]
libGL error: failed to load driver: swrast

Thread 1 "rviz" received signal SIGSEGV, Segmentation fault.
0x00007ffff354a6b4 in glXCreateContext () from /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
(gdb) bt
#0  0x00007ffff354a6b4 in glXCreateContext () from /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
#1  0x00007ffff7ad5600 in rviz::RenderSystem::setupDummyWindowId() () from /opt/ros/kinetic/lib/librviz.so
#2  0x00007ffff7ad9712 in rviz::RenderSystem::RenderSystem() () from /opt/ros/kinetic/lib/librviz.so
#3  0x00007ffff7ad9a05 in rviz::RenderSystem::get() () from /opt/ros/kinetic/lib/librviz.so
#4  0x00007ffff7ad4dc1 in rviz::QtOgreRenderWindow::QtOgreRenderWindow(QWidget*) () from /opt/ros/kinetic/lib/librviz.so
#5  0x00007ffff7afb949 in rviz::RenderPanel::RenderPanel(QWidget*) () from /opt/ros/kinetic/lib/librviz.so
#6  0x00007ffff7b47160 in rviz::VisualizationFrame::initialize(QString const&) () from /opt/ros/kinetic/lib/librviz.so
#7  0x00007ffff7b52509 in rviz::VisualizerApp::init(int, char**) () from /opt/ros/kinetic/lib/librviz.so
#8  0x0000000000400c90 in main ()

NVIDIA DriverをDocker Imageにもインストール

ここでindigoのイメージだとちゃんとrvizがうごくことを確認する。

kineticの方で、GDBの結果とldconfig -p | grep -i gl.soの結果から、mesaのlibGL.soが良くないと思い綺麗なubuntuイメージにnvidia drivers nvidia-384 をインストール (mesaとかOpenGLとかNvidiaとかの関係は(6)を読むとわかりそうだがまだちゃんと読んでない)。

Dockerfile

FROM ubuntu:16.04

ENV NVIDIA_VISIBLE_DEVICES ${NVIDIA_VISIBLE_DEVICES:-all}
ENV NVIDIA_DRIVER_CAPABILITIES ${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics

RUN apt update && apt install -y expect
COPY nvidia-expect.exp /
RUN expect /nvidia-expect.exp

RUN sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
RUN apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

RUN apt update
RUN apt-get install ros-kinetic-desktop-full -y

CMD ["rosrun", "rviz", "rviz"]

nvidia-expect.exp

#!/usr/bin/env expect

set timeout -1
spawn apt-get install -y nvidia-384
expect {
      "\\\[More\\\]" { send "\n"; exp_continue; }
          "Country of origin for the keyboard: " { send "29\n"; }
}
expect {
      "\\\[More\\\]" { send "\n"; exp_continue; }
          "Keyboard layout: " { send "1\n" }
}
expect eof

これで、 docker runしrvizを実行する。

# ROS_MASTER_URI=http://xxx:11311 rviz
[ INFO] [1549507833.199991200]: rviz version 1.12.16
[ INFO] [1549507833.200033889]: compiled against Qt version 5.5.1
[ INFO] [1549507833.200045286]: compiled against OGRE version 1.9.0 (Ghadamon)
[...]
[ WARN] [1549507834.409556933]: OGRE EXCEPTION(2:InvalidParametersException): Window with name 'OgreWindow(1)' already exists in GLRenderSystem::_createRenderWindow at /build/ogre-1.9-mqY1wq/ogre-1.9-1.9.0+dfsg1/RenderSystems/GL/src/OgreGLRenderSystem.cpp (line 1057)
rviz::RenderSystem: error creating render window: OGRE EXCEPTION(2:InvalidParametersException): Window with name 'OgreWindow(1)' already exists in GLRenderSystem::_createRenderWindow at /build/ogre-1.9-mqY1wq/ogre-1.9-1.9.0+dfsg1/RenderSystems/GL/src/OgreGLRenderSystem.cpp (line1057)
[ERROR] [1549507834.409586881]: Unable to create the rendering window after 100 tries.
Segmentation fault (core dumped)
(gdb) bt
#0  0x00007ffff7ad4e85 in rviz::QtOgreRenderWindow::QtOgreRenderWindow(QWidget*) () from /opt/ros/kinetic/lib/librviz.so
#1  0x00007ffff7afb949 in rviz::RenderPanel::RenderPanel(QWidget*) () from /opt/ros/kinetic/lib/librviz.so
#2  0x00007ffff7b47160 in rviz::VisualizationFrame::initialize(QString const&) () from /opt/ros/kinetic/lib/librviz.so
#3  0x00007ffff7b52509 in rviz::VisualizerApp::init(int, char**) () from /opt/ros/kinetic/lib/librviz.so
#4  0x0000000000400c90 in main ()

ちなみにここでglxgearsすると正常に動いているっぽい(fpsがstdoutに出てる)が描画が正常じゃない(真っ黒)。

TODO

docker/Tutorials/GUI - ROS Wiki のSimple Way以外を試す

感想

わからん

References

(2):

github.com

(1):

github.com

(3):

qiita.com

(4): github.com

(5): askubuntu.com

(6):

www.reddit.com

Vapeに入門したまとめ

はじめに

ストレスでタバコに手を出しそうになったがグッとこらえてvapeをはじめた。最近2本目としてfog1を買ったが、その際種類がいろいろあって悩んだのでメモ。

vapeとは

そもそもタバコはタバコ葉を燃焼させその際生成される物質を吸引するもの*1。この際一緒に発生するタールやニコチン、一酸化炭素などが最近しばしば危険だと言われている。

vape(電子タバコとも言う、加熱式タバコとは違う)*2 は原料から違って、プロピレングリコール(PG)とベジタブルグリセリン(VG)、それと香料が原料。PGとVGは加熱して蒸気を発生させるために含有されており*3、香料は名前の通り香りづけのために含有されている。PGとVGはコンサートでの演出のためのスモークに使われるものと同じであるとのこと*4。この加熱のためにコイルに電流を流し発熱させるから"電子"たばこと呼ばれているものと考えられる。

vapeはおおまかにバッテリ(MODともいうらしい)、アトマイザ(リキッドが入る容器)、吸い口、コイルで構成されている*5。左citationの画像がわかりやすい。

vapeは形状でおおよそ3種類に分類されている: タバコタイプ、ペンタイプ、ボックスタイプ*6。タバコタイプは名前の通りタバコのような細長い円筒形をしている。ペンタイプは形状はタバコタイプと似ているものの若干太い。ボックスタイプは円筒と直方体がつながった形をしている。直方体(ボックス)部はたいていバッテリー。

はじめのvape

最初はflevo*7を買った。理由としては、タバコっぽい形のほうがかっこいいだろうというのと、あとスターターキットが1000円以内で安いから。Amazonで買った。Dr.VAPEも視野に入れていたがスターターキットが7000円とちょっと高かったのでやめた。リキッドはタバコフレーバ、メンソール、ビタミンベリーを試した。メンソールはそこそこ好きだったがタバコフレーバとビタミンベリーは甘みが苦手だった。特にビタミンベリーは(吐き気ほどではないが)きもちわるくなることもあった。甘いものが嫌いなわけではないが。機械によって味が変わることを知らなかったことと、初めてだったこともあり満足していたが、のちにfog1を買ってこれの味が弱いことに気づく。

2本目のvape

つぎにJustfogのfog1*8をvapelogで買った。味がよいという記事をたくさん見つけたのが決めて*9*10。べプログショップで買った。 実際に使ってみると、(FLEVOと比べて)味は濃いし煙も多い。FLEVOではわざわざ煙を鼻に通して香りを楽しんでいたが、fog1はそんなことをしなくても口に煙を入れるだけでなんとなく味がするし、肺で吸うときに喉で煙を感じられる。FLEVOとは全然違った。 不満として、リキッドを変更するのが面倒くさいということがある。というのも、*11でも言っているように、アトマイザが一体型(アトマイザのみでリキッドを保持できない)ので、リキッドが残っている状態で別のアトマイザに交換する、ということができない。初めて買ったまともなvapeであり、いろいろな味を試してみたかったので、これは気に入らない。

試したリキッド

タバコクラシック

甘いけどそんなに嫌いではない。これがたばこ味なのかはわからない (MarlBoroしか吸ったことはないが、MarlBoroとは似ていない) タバコクラシック【Sarome Tokyo(サロメトウキョウ)】 | ベプログショップ

Coe de Sex on the Beach

パイナップル味。甘くて苦手。 Coe de Sex on the Beach【小江戸工房(コエドコウボウ)】 | ベプログショップ

ドライハードメンソール

味はない、ちょっと苦い味がするかも。メンソールは強烈。はじめは喉にしびれる刺激が来る(今はなんとも感じなくなった)。鼻にたくさん通すとキツい。カフェイン含有。肺からカフェイン摂取できるので効きそう。 【ベプリキ】ドライハードメンソール 15ml | ベプログショップ

次に買おうと思っている奴

つぎはbox型のやつで、アトマイザが独立しているやつを買おうと思っている。

*1:JT, '紙巻たばこ(シガレット)', Available: https://www.jti.co.jp/tobacco/knowledge/variety/cigarette/index.html, [Accessed: 28-Aug-2018].

*2:JT, '電子タバコ', Available: https://www.jti.co.jp/tobacco/knowledge/variety/electronic_cigarette/index.html, Accessed: 20-Aug-2018

*3:価格.comマガジン, '電子タバコ「VAPE(ベイプ)」って何だ? 初心者向けモデルはコレ! 「アイコス」との違いは?', Available: https://kakakumag.com/hobby/?id=10918, [Accessed: 28-Aug-2018]

*4:価格.comマガジン, '電子タバコ「VAPE(ベイプ)」って何だ? 初心者向けモデルはコレ! 「アイコス」との違いは?', Available: https://kakakumag.com/hobby/?id=10918, [Accessed: 28-Aug-2018]

*5:VAPE-MASTER, 'VAPE電子タバコの構造/煙の仕組み/各パーツ名の初心者向け解説 | VAPEMASTER', Available: https://vape-master.jp/construction/, [Acessed: 28-Aug-2018

*6:べプログショップ, 'ベプログショップ | 初めての電子タバコの選び方', Available: https://vapelog.jp/shop/user_data/beginner_choose.php, [Accessed: 28-Aug-2018]

*7:dmm.com, 'FLEVO | FLEVO公式サイト', Available: https://www.dmm.com/top/special/flevo/, [Accessed: 28-Aug-2018]

*8:Justfog, 'Justfog – FOG1 Kit', Available: http://www.justfog.com/?avada_portfolio=fog1-kit, [Accessed: 28-Aug-2018]

*9:スキクエ, 'VAPEスタータキットで迷う?これがおすすめ!Fog1最強キットを徹底レビュー | スキクエ', Available: https://www.sukima-desuyo.com/entry/vape-fog1, Accessed: [28-Aug,2018]

*10:No.1VAPE, '【メンソールでも大丈夫】味を濃厚に感じる「FOG1」を2ヶ月使ってみた感想', Available: http://marauders.jp/fog1/, Accessed: [28-Aug-2018]

*11:No.1VAPE, '【メンソールでも大丈夫】味を濃厚に感じる「FOG1」を2ヶ月使ってみた感想', Available: http://marauders.jp/fog1/, Accessed: [28-Aug-2018]

debian stretch on thinkpadでtrackpoint sensitivityを永続化

tl;dr

systemdでファイル監視するやつが動かず、udevにルールを追加することでうごいた

xinput --list

...
↳ TPPS/2 IBM TrackPoint 
...

cat /etc/udev/10-trackpoint.rules

ACTION=="add", SUBSYSTEM=="input", ATTR{name}=="TPPS/2 IBM TrackPoint", ATTR{device/sensitivity}="200", ATTR{device/press_to_select}="1"

ATTR{device/press_to_select}="1"はsensitivityには関係ないと思う。ところでこれを書いているにもかかわらずtrackpadがpressでセレクトできない。消して試したいがめんどうになって諦めた。

やったこと

systemdのファイル監視でfdに書き込む

cat /lib/systemd/system/trackpoint.path

[Unit]
Description=Watch for, and modify, Trackpoint attributes

[Path]
PathExists=/sys/devices/platform/i8042/serio1/serio2/sensitivity

[Install]
WantedBy=default.target

cat /lib/systemd/system/trackpoint.service

[Unit]
Description=set trackpoint sensitivity

[Service]
ExecStart=/usr/local/bin/trackpoint_sensitivity.sh

cat /usr/local/bin/trackpoint_sensitivity.sh (実行権限あり)

#!/bin/bash
echo -n 250 | tee /sys/devices/platform/i8042/serio1/serio2/sensitivity

考察

そもそもserviceが呼び出されていなさそう(trackpoint_sensitivity.shにecho "test" > /home/xxx/test.txtでtest.txtはできなかった)

udevにルール追加(動かない版)

cat /etc/udev/rules.d/10-trackpoint.rules

KERNEL=="serio2", SUBSYSTEM=="serio", DRIVERS=="psmouse", ATTR{sensitivity}:="180", ATTR{speed}:="150"

udevadm info -a -p /sys/devices/platform/i8042/serio1/serio2/

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/platform/i8042/serio1/serio2':
    KERNEL=="serio2"
    SUBSYSTEM=="serio"
    DRIVER=="psmouse"
    ATTR{bind_mode}=="auto"
    ATTR{description}=="Synaptics pass-through"
    ATTR{draghys}=="255"
    ATTR{drift_time}=="5"
    ATTR{ext_dev}=="1"
    ATTR{firmware_id}==""
    ATTR{inertia}=="6"
    ATTR{jenks}=="135"
    ATTR{mindrag}=="20"
    ATTR{press_to_select}=="1"
    ATTR{protocol}=="TPPS/2"
    ATTR{rate}=="100"
    ATTR{reach}=="10"
    ATTR{resetafter}=="5"
    ATTR{resolution}=="200"
    ATTR{resync_time}=="0"
    ATTR{sensitivity}=="240"
    ATTR{skipback}=="0"
    ATTR{speed}=="97"
    ATTR{thresh}=="8"
    ATTR{upthresh}=="255"
    ATTR{ztime}=="38"

  looking at parent device '/devices/platform/i8042/serio1':
    KERNELS=="serio1"
    SUBSYSTEMS=="serio"
    DRIVERS=="psmouse"
    ATTRS{bind_mode}=="auto"
    ATTRS{description}=="i8042 AUX port"
    ATTRS{firmware_id}=="PNP: LEN0058 PNP0f13"
    ATTRS{protocol}=="SynPS/2"
    ATTRS{rate}=="80"
    ATTRS{resetafter}=="5"
    ATTRS{resolution}=="200"
    ATTRS{resync_time}=="0"

  looking at parent device '/devices/platform/i8042':
    KERNELS=="i8042"
    SUBSYSTEMS=="platform"
    DRIVERS=="i8042"
    ATTRS{driver_override}=="(null)"

  looking at parent device '/devices/platform':
    KERNELS=="platform"
    SUBSYSTEMS==""
    DRIVERS==""

考察

ようわからんがうごかない

参考

トラックポイント - ArchWiki

InstallingDebianOn/Thinkpad/Trackpoint - Debian Wiki

Ubuntu17.10でtrackpointの速度を調整する

特殊なSolaris11にgitをソースからインストールする(管理者権限なし)(install command)

/usr/ucb/installがないのでビルド時にINSTALL=`which install`する

 

関連

kpdk.hatenablog.jp