Ubuntu 16.04 (Unity)でnatural scrollingにする(マウスホイールの上下を逆にする)

Ubuntuではまさにこの目的のために"Natural Scrolling"というアプリがあるのだけれど、スクリーンがロックされたあとや、サスペンドハイバネーションから回復した後に、もとに戻ってしまう。

想像なのだけれど、Natural Scrollingアプリケーションが監視しているdbusからのメッセージがUnity向けに設計されていないのであろう。しょぼい話だ。


This article is about how to fix an issue where "Natural Scrolling" doesn't work after Screen Unlock, resume from suspension and hibernation. IMO it's because the application's design which doesn't consider usages under Ubuntu Unity. Here's a quick fix for it. I hope it helps you.


function go_natural() {
  for i in $(xinput | grep 'slave  pointer' | head -n -0 | cut -f 2 -d '=' | cut -f 1) ; do
    xinput --set-button-map $i 1 2 3 5 4 7 6;


dbus-monitor --session "type='signal',interface='com.canonical.Unity.Session'" | \
  ( while true
    do read X
       if echo $X | grep "UnlockRequested" &> /dev/null; then
    done )


chmod 755 ~/bin/natural.sh

として実行権限を与える。 このファイルをStartup Applicationsに登録する。


これでひとまず手元のマシンでは所期の動作になるが、今年の4月にUbuntu 18.04にするとどうせまた直さないといけないんだろうな。


Ubuntu 16.04ではmozcが使える。なれてしまうとanthyには戻れない。 が、mozcはmozcで、ログイン後の入力モードがデフォルトでDirect Input(直接入力)になっていて、しかも私のキーボードではひらがな入力モードに変更できない。なので、毎度毎度マウスを操作してひらがな入力モードに変更しなくてはならない。これが嫌で一度anthyに戻そうとしたが、やはり変換精度の差はいかんともしがたい。mozcを使うときは日本語を使いたい時のはずなので、どのような経緯でこのような仕様になったのか、不思議なところであるがこの際、どうでもいい。



mozcのレポジトリをクローンしdockerを使ってソースからビルドする方法もあるが、その後のインストールでかったるいことになりそうだ。 ということでUbuntuのソースパッケージからビルドすることにする。


sudo apt update
sudo apt upgrade
sudo apt install build-essential devscripts -y
sudo apt build-dep ibus-mozc -y
apt source ibus-mozc


emacs -nw $(find . -name property_handler.cc)
// Some users expect that Mozc is turned off by default on IBus 1.5.0 and later.
// https://code.google.com/p/mozc/issues/detail?id=201
// On IBus 1.4.x, IBus expects that an IME should always be turned on and
// IME on/off keys are handled by IBus itself rather than each IME.
const bool kActivatedOnLaunch = true; //false;
const bool kActivatedOnLaunch = true;
#endif  // IBus>=1.5.0


cd mozc*
dpkg-buildpackage -us -uc -b


sudo dpkg -i ../mozc*.deb ../ibus-mozc*.deb



この記事は、「Ubuntu 16.04 aarch64環境でmozc pkgが無いのでsource pkgからbuild」[2]を参考にして執筆した。 また、ここに記された手順は無保証であり、その結果について執筆者は責任を負わない。フィードバックや修正提案を採用する義務を執筆者は負わないが、それらは歓迎される。


  • 1 Mozc issue-#381
  • 2 Ubuntu 16.04 aarch64環境でmozc pkgが無いのでsource pkgからbuild




How to convert all my audios into mp4 at once

I'm using Qnap NAS and recently I came to want to play all the media in living room at home. What is the best appliance?

Actually, there is a long story.

Apple TV? No it plays media only in my iPhone. And Wi-fi at home isn't good when a microwave is working.

Chromecast? was not a good idea for similar reasons.

Purchase a new network media player? No. It doesn't play ALAC, in which most of my audio files are encoded. Ones play ALAC cost 1,000 - 2,000 dollars. And those expensive ones do not look playing videos.

Finally I chose Sony PlayStation 3, which I bought several years ago. And since it doesn't play ALAC/FLAC, I need to convert thousands of my files.

Is there good solution in Linux? I couldn't find it. 'SoundConverter' looked nice, but it didn't understand ALAC. And only writes MP3 not MP4 (PS3 plays both, but I liked the latter).

Anyway I wrote a command line below to perform conversion from my audios to mp4 format.

export destroot="/mnt/livius/Qmultimedia/PS3/Music" && \
export srcroot="/mnt/livius/Qmultimedia/iTunes/iTunes Media/Music" && \
find "$srcroot" \
    -type f \
    -exec \
        sh -c '\
            export fname="${1#/*Music/}" && \
            export destdir="$destroot/$(dirname "${fname}")" && \
            mkdir -p "$destdir" && \
            /usr/bin/avconv -y -i \
                "$srcroot/$fname" \
                 -vn -acodec libvo_aacenc -b:a 320k -ac 2 -ar 48000 -b:a 320k \
                "$destroot/${fname%.*}.mp4" \
            ' \
            "Convert all my music into MP4" {} \;

Writing S-expression inside Java codes

I recently created a library that evaluates java.lang.Objects as S-expressions (my summer homework;)). In other words, you can embed a LISP program inside Java code, but unlike fun4j you don't need to write your LISP code as a String. You can write it as a real Java program. That is,



        assign($("i"), 0),
            lt($("i"), 10), 
            print(format("@@@@@@@@ %s @@@@@@@@\n", $("i"))), 
            assign($("i"), add($("i"), 1))

where progn, assign, loop, lt, print, and so on are names of Java methods that return evaluatable objects (java.lang.Object[]'s) and Basic.eval is a function that does the 'evaluate' on given java.lang.Object.
This program produces the output below


@@@@@@@@ 0 @@@@@@@@

@@@@@@@@ 1 @@@@@@@@

@@@@@@@@ 2 @@@@@@@@

@@@@@@@@ 3 @@@@@@@@

@@@@@@@@ 4 @@@@@@@@

@@@@@@@@ 5 @@@@@@@@

@@@@@@@@ 6 @@@@@@@@

@@@@@@@@ 7 @@@@@@@@

@@@@@@@@ 8 @@@@@@@@

@@@@@@@@ 9 @@@@@@@@ 

It's not yet published in Maven's Central Repository, but will become available soon.
The source code is found here: https://github.com/dakusui/petronia/