October 17, 2021

[Note] New Keyboard and mouse - Linux middle mouse button emulation

This is a note on new keyboard and mouse I bought recently for my Linux desktop due to aging keyboard and mouse.

I've been using MS keyboard/mouse for many years (https://www.amazon.com/gp/product/B00CYX54C0/):


  • Most of key layout is great
  • Ergonomic
  • Perfect keyboard height and feeling of typing, quiet.


  • Small function keys
  • Strange layout of Insert/Del/Pg up-dn/Home/End keys.

I never got used to the mentioned keys as cons, and due to that, I always have to look at the keyboard for them.

Mouse is great, however, I like trackball for my wrist and shoulder over mouse, giving less stress on them.


I prefer keyboard with: 

  • normal size keys and layout for the mentioned keys.
  • non-bluetooth, wireless
  • no number keypad

These are what I bought:

Pros: It's the old standard style keyboard - I can do touch type for function keys and insert/del/home/pg up-dn keys easily.  

Cons: The key height is little too tall -- I like laptop like keyboard height and feeling better.

These days, many OS/apps use much less of function keys, but it's great for IDEs and customize them to do whatever the user needs are.

Everything is great, except that the location of buttons are a bit awkward, especially for the 2nd button.  It's too light, and can be pushed when clicking on buttons.  No 3rd button (middle button).

* * * * *

Note: emulating 3rd button


# Find device number
xinput list
# Inspect device properties
xinput list-props 9
# Turn on the emulator for middle button
sudo xinput set-prop 9 "libinput Middle Emulation Enabled" 1

This setting can be in ~/.xstartup.  
Here are a couple of other ways to set this, which I haven't tried:

[1] Modify xorg.conf
Section "InputDevice"
        Identifier      "Configured Mouse"
        Driver          "mouse"
        Option          "CorePointer"
        Option          "Device"                "/dev/input/mice"
        Option          "Protocol"              "ImPS/2"
        Option          "Emulate3Buttons"       "true"

[2] add in xorg.conf.d directory
Section "InputClass"
   Identifier "middle button"
   MatchIsPointer "on"
   MatchDriver "libinput"
   Option "MiddleEmulation" "on"

xorg.conf and xorg.conf.d are in /usr/share/X11/xorg.conf.d for my Ubuntu 20.01.


June 29, 2021

[Note] Converting Audible books to MP3 (legally)


Audible runs on most of devices and via web browser.  Still some odd devices only support MP3.  This note is to convert Audible files you *own* to mp3 to listen to them on those odd devices.



Linux (Ubuntu 20), console, Chrome browser, Chrome driver

Optional: bash, ffmpeg, mid3v2


  1. Download Audible files from Audible site using your ID, PW.  The files are .aax format.
  2. Using an open source project, get "activation code" with your ID/PW.
  3. Using another open source project, convert AAX to MP3 with the activation code.


  • When .aax is converted to mp3, the converter split them to multiple mp3 files, cover.jpg, and play list (.m3u).
  •  Optional S/W and steps are needed to do: merge all the mp3 into one mp3 file with cover image embedded.


[1] Log onto Audible.com, click on 'Library' at the top.  Click on Download button.

[2] Get activation code

  1. $ git clone https://github.com/inAudible-NG/audible-activator.git
  2. Check your Chrome browser version
  3. Download an appropriate chrome driver version, https://chromedriver.storage.googleapis.com/index.html
  4. Unzip the download file.  Find and copy chromedriver executable into directory audible-activator
  5. cd audible-activator
  6. ./audible-activator.py -l us
    This will ask Amazon ID/PW.  Then it will give Player ID and activation_bytes:

$ ./audible-activator.py -l us
Username: [email protected]
[*] Player ID is SOME_PLAYER_ID

ATTENTION: Now you may have to enter a one-time password manually. Once you are done, press enter to continue...
activation_bytes: SOME_CODE

SOME_CODE is what you need for the next step, converting to MP3.

[3] Convert AAX to MP3

$ git clone https://github.com/KrumpetPirate/AAXtoMP3.git
$ cd AAXtoMP3

It will create directory Audiobook/[AUTHOR]/[BOOK TITLE]/, and place .mp3, cover.jpg, play list file - .m3u files.


As mentioned, above step will create multiple mp3 files.  For some odd devices, you'd want to have only 1 mp3 file per book, and cover image embedded.

  • To merge mp3 files into one, use ffmpeg.
  • To add conver.jpg to the mp3, use mid3v2.  To obtain the s/w, do
    $ sudo apt install python3-mutagen

Sample Usage

Create a text file mp3list.lst, containing:

file '/path/to/file1.mp3'
file '/path/to/file2.mp3'
file '/path/to/file3.mp3'

$ ffmpeg -f concat -safe 0 -i mp3list.lst -metadata artist="$author" -metadata title="$book" -c copy $path/merged.mp3

Adding cover image:

$ mid3v2 -p cover.jpg merged.mp3

With a lot of AAX files, merging and adding cover image steps are tedious.  Here is a script I wrote to automate it (https://gist.github.com/keithkim/7c9ac8b7cd291bbcdb1a61ad29691048).  Save in Audiobook directory and run it from there: