2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

UbuntuデスクトップでMagic Trackpad 2を快適に使う

Last updated at Posted at 2020-08-26

はじめに

Ubuntu 20.04 LTS で Magic Trackpad 2 を使っていますが、
以下の方のように、ときどきカーソルが固まってしまいます。

Magic Trackpad 2 のバッテリー容量が減少してくると、
電池消費を抑えるために接続を切断するという動作をしていたがために、
カーソルが固まってしまっていたのですね。

そこで、この方の対応のように、Magic Trackpad 2 だけを対象として、
電池消費を抑える機能をOFFにするパッチをカーネルに当てて、対応しようと思います。

以下の対応ですが、どうもまだ発症するようです...

1.Ubuntu Kernel ビルド用のDockerコンテナを用意する

こちらが参考になります。

Ubuntuカーネルをビルドする環境は、デスクトップ環境が汚れると嫌なので、
Docker上に構築することにします。

docker pull ubuntu:focal
docker run -it --name ubuntu ubuntu:focal bash

Dockerコンテナ上で、カーネルビルドに必要なパッケージをインストールします。

apt update && apt upgrade -y
apt install -y git fakeroot build-essential libncurses5 libncurses5-dev libelf-dev binutils-dev devscripts u-boot-tools
sed 's/# deb-src/deb-src/g' -i /etc/apt/sources.list
apt update
apt-get -y build-dep linux

2.Ubuntu Kernel にパッチを当てます

カーネルソースをダウンロードします。

cd
git clone git://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux/+git/focal
cd focal

Ubuntuデスクトップのカーネルバージョンが以下なので、

uname -a
Linux ryzen 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

同じバージョンのカーネルソースをcheckoutします。

git tag -l Ubuntu-5.4.0-42*
Ubuntu-5.4.0-42.46
git checkout -b focal+mt2patch Ubuntu-5.4.0-42.46

パッチを適用します。

apt install -y vim

まず、Magic Trackpad 2 のデバイスIDを調べます。

vim drivers/hid/hid-ids.h
#define USB_VENDOR_ID_APPLE             0x05ac
#define BT_VENDOR_ID_APPLE              0x004c
#define USB_DEVICE_ID_APPLE_MIGHTYMOUSE 0x0304
#define USB_DEVICE_ID_APPLE_MAGICMOUSE  0x030d
#define USB_DEVICE_ID_APPLE_MAGICTRACKPAD       0x030e
#define USB_DEVICE_ID_APPLE_MAGICTRACKPAD2      0x0265

USB_DEVICE_ID_APPLE_{MAGICMOUSE,MAGICTRACKPAD,MAGICTRACKPAD2}を、
電池消費を抑える機能をOFFにするようにコードを修正します。

vim drivers/hid/hid-input.c
git diff
--- hid-input.c.orig    2020-09-01 09:53:58.654163157 +0900
+++ hid-input.c 2020-09-01 09:46:55.925059406 +0900
@@ -310,6 +310,12 @@
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE,
                USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI),
          HID_BATTERY_QUIRK_PERCENT | HID_BATTERY_QUIRK_FEATURE },
+       { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICMOUSE),
+         HID_BATTERY_QUIRK_IGNORE },
+       { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICTRACKPAD),
+         HID_BATTERY_QUIRK_IGNORE },
+       { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICTRACKPAD2),
+         HID_BATTERY_QUIRK_IGNORE },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM,
                USB_DEVICE_ID_ELECOM_BM084),
          HID_BATTERY_QUIRK_IGNORE },

3.Ubuntu Kernel をビルドする

こちらの方の記事を参考にビルドします。

まずはホストのUbuntuからconfigファイルをdockerにコピーします。

docker cp /boot/config-5.4.0-42-generic ubuntu:/tmp/

dockerコンテナ上でコピーした設定ファイルを移動して、設定を反映させます。

mkdir ../build
cp /tmp/config-5.4.0-42-generic ../build/.config
scripts/config --file ../build/.config --disable DEBUG_INFO
make O=../build/ oldconfig

カーネルとモジュールをビルドします。

time make -j 32 O=../build/ LOCALVERSION=-mt2patch
real    5m32.215s
user    140m10.856s
sys     16m43.152s
time make modules -j 32 O=../build/ LOCALVERSION=-mt2patch
real    0m27.762s
user    1m30.672s
sys     1m41.236s
time make bindeb-pkg -j 32 O=../build/ LOCALVERSION=-mt2patch
real    1m3.661s
user    4m49.134s
sys     2m14.784s

Ryzen 9 3950x は爆速ですね...

4.Ubuntu Kernel をインストールする

ビルドした結果、1つ上のディレクトリにパッケージが出来ています。

ls -l ../*.deb
-rw-r--r-- 1 root root 11424784 Aug 26 17:45 ../linux-headers-5.4.44-mt2patch_5.4.44-mt2patch-1_amd64.deb
-rw-r--r-- 1 root root 61014544 Aug 26 17:45 ../linux-image-5.4.44-mt2patch_5.4.44-mt2patch-1_amd64.deb
-rw-r--r-- 1 root root  1071376 Aug 26 17:45 ../linux-libc-dev_5.4.44-mt2patch-1_amd64.deb

ここで、ファイル名が5.4.44-mt2patchとなっているのは、
カーネルコンフィグのバージョンがCONFIG_VERSION_SIGNATURE="Ubuntu 5.4.0-42.46-generic 5.4.44"
となっていたからでしょうか。

これらをホスト側にコピーし、インストールします。

docker cp ubuntu:/root/linux-headers-5.4.44-mt2patch_5.4.44-mt2patch-1_amd64.deb .
docker cp ubuntu:/root/linux-image-5.4.44-mt2patch_5.4.44-mt2patch-1_amd64.deb .
docker cp ubuntu:/root/linux-libc-dev_5.4.44-mt2patch-1_amd64.deb .
sudo apt install ./linux-headers-5.4.44-mt2patch_5.4.44-mt2patch-1_amd64.deb
sudo apt install ./linux-image-5.4.44-mt2patch_5.4.44-mt2patch-1_amd64.deb
sudo apt install ./linux-libc-dev_5.4.44-mt2patch-1_amd64.deb

完了です。これから、カーソルが固まらないと良いな。

元のカーネルに戻したいとき

自分でビルドしたカーネルが思うように動かなかった時、
元のカーネルでブートしたくなると思います。
そのときは、/etc/default/grubを修正します。

sudo vim /etc/default/grub

修正するのは、GRUB_TIMEOUT_STYLE=menuにして、タイムアウト時間を伸ばすことです。
これで、ブート時に使用するカーネルを選択できるようになります。

--- grub.ucf-dist       2020-08-02 19:43:53.512717712 +0900
+++ grub        2020-08-26 17:25:45.283739309 +0900
@@ -4,8 +4,9 @@
 #   info -f grub -n 'Simple configuration'

 GRUB_DEFAULT=0
-GRUB_TIMEOUT_STYLE=hidden
-GRUB_TIMEOUT=0
+#GRUB_TIMEOUT_STYLE=hidden
+GRUB_TIMEOUT_STYLE=menu
+GRUB_TIMEOUT=5
 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
 GRUB_CMDLINE_LINUX_DEFAULT=""
 GRUB_CMDLINE_LINUX=""

修正が完了したら、grub を更新しておきます。

sudo update-grub
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?