Cinnamon 6.4の変更

Manjaro Cinnamon

Manjaro Cinnamonの公式イメージ画像

去年の12月はじめ頃だったか,ManjaroのCinnamonが6.4系にアップデートされて大きく変わった。

個人的に気になったのが音量調整の段階が5%づつに固定されてしまった点だ。この5%という値はソースの中にハードコードされていて変更できないらしい。

そこで該当するパッケージ(cinnamon-settings-daemon)を改変してインストールしなおすことにした。環境はManjaro Cinnamonだが,手順はすべてのArch系ディストリビューションに適用できると思う。

インストール手順

手順は以下の通り

  1. ソースファイルを入手,改変

  2. PKGBUILDを入手,改変

  3. パッケージのチェックサムを改変

  4. ビルドしてインストール

CinnamonはLinux Mintで開発されているデスクトップ環境のため,見つかる情報のほぼすべてがMintのもので,そのままArchに適用することはできない。ただしパッケージのソースコードを修正してからビルドして再インストールするという手順に変わりはない。

ArchのパッケージをビルドするときはPKGBUILDというbashスクリプトが使われる。PKGBUILDにはソースファイルのありかや依存情報などインストールに必要な情報が含まれていて,PKGBUILDさえどうにかすればなんでもpacmanで管理できるというのがArchのいいところだと思う。

ソースファイルの入手と改変

パッケージ詳細ページからアップストリームのリポジトリはすぐに見つけられる。

あとから細々したファイルが増えるので空のディレクトリ内に移動してクローンする。

mkdir csd
cd csd
git clone https://github.com/linuxmint/cinnamon-settings-daemon

改変するのはcinnamon-settings-daemon > plugins > media-keysの中にあるcsd-media-keys-manager.cというファイル。

この中のVOLUME_STEPを5から任意の値に変更する。今回は以前までのデフォルトの1にした。この程度の変更ならsedを使ってsed -i -e "s/VOLUME_STEP 5/VOLUME_STEP 1/" cinnamon-settings-daemon/plugins/media-keys/csd-media-keys-manager.cとしてもいい。

#define VOLUME_STEP 1

保存して終了。

ここでパッケージをtar.gz形式で圧縮しておく。

tar -czvf cinnamon-settings-daemon.tar.gz cinnamon-settings-daemon

PKGBUILDの入手と改変

PKGBUILDもパッケージ詳細ページのSource Filesというリンクから探すことができる。

Open Rawと表示されたボタン
wget "https://gitlab.archlinux.org/archlinux/packaging/packages/cinnamon-settings-daemon/-/raw/main/PKGBUILD"

wgetでダウンロードできたらsourcebuild()のディレクトリ名を以下のように書き換える。

optdepends=('cinnamon-translations: i18n')
makedepends=(meson samurai xf86-input-wacom glib2-devel)
options=(!emptydirs)
# source=(${url}/archive/${pkgver}/${pkgname}-${pkgver}.tar.gz)
source=(${pkgname}.tar.gz)
sha512sums=('d21d8e1fa80f54b7bc5bde9e42c939e99247df6cb1c1f00ec0de46f938c476bf3633647fa8a1d9962498d62aecd7a624826f97c145d9bd05aaf3f82180a95a5a')
b2sums=('1cb9b49c04f03f3c9d8357e3f9570aecd41bfc4abe5c9fa84410d33566906e4ee8ba44947a98958633ca423b394efc07c0dd670206b332f0efcaf3839e682830')

build() {
# arch-meson --libexecdir=lib/${pkgname} ${pkgname}-${pkgver} build
arch-meson --libexecdir=lib/${pkgname} ${pkgname} build
samu -C build
}

ここで一旦変更内容を保存しておく。

チェックサムの改変

makepkg -gで新しいパッケージのチェックサムを出力する。

makepkg -g
# ==> Retrieving sources...
#   -> Found cinnamon-settings-daemon.tar.gz
# ==> Generating checksums for source files...
# sha512sums=('3f1e746292ff3e566df47ed06920fc46391e0ec845c936b140ece26d45b1c72f30cf9996d3598928fe7ce760d789d8156bc3d02e2a4c72706cf4de6a819e4734')
# b2sums=('88acc19c413989ded1f02d214080156ed24ebde118078be60f1e911067799f973338eca6eb31ac9be0cb36c2ed85fdb85ba2ea2a07e19c9e0c37c44dfd0d414a')

このsha512sumsb2sumsの値をターミナルからPKGBUILDにコピペする。

あるいは手間はかかるがmakepkg -g >> checksums.newとして出力し,grep "sha512sums=" PKGBUILD >> checksums.old && grep "b2sums=" PKGBUILD >> checksums.oldで取り出した古いチェックサムとdiff --unified checksums.old checksums.new > PKGBUILD.patchというふうにパッチを作ってpatch < PKGBUILD.patchとしてPKGBUILDに適用するという手もある。(もう少しまともな方法をご存じの方は教えてください。)

ArchWikiはpacman-contribに含まれるupdpkgsumsというチェックサムを更新できる便利なツールを使えと案内しているが,以下のようにパッケージにCR+LFが含まれているとエラーが出てしまった。

updpkgsums cinnamon-settings-daemon.tar.gz
# /usr/bin/makepkg: line 1255: warning: command substitution: ignored null byte in input
# ==> ERROR: cinnamon-settings-daemon.tar.gz contains CRLF characters and cannot be sourced.
# ==> ERROR: Failed to generate new checksums

grepするとたしかにCR+LFが含まれているらしいことはわかった。

grep -lzUP '\r\n' ./*
# => cinnamon-settings-daemon.tar.gz

ただしソースファイルには見当たらないし,sedで無理やり除去してもビルドできないしで今回は対応を諦めた。

このパッケージ以外でも同様のエラーが発生することは確認したので原因はこんど暇なときに調べます。初級Linuxerへの道は遠い。

ビルドしてインストール

PKGBUILDに新しいチェックサムを適用したらmakepkg -siでビルドしてインストールできる。

makepkg -si

以下のようなエラーが出たらbuild()のディレクトリ名が${pkgname}-${pkgver}のままになっておりgit cloneしたディレクトリ名と異なっているので${pkgname}だけになるようPKGBUILDを修正する。

ERROR: Neither source directory 'cinnamon-settings-daemon-6.4.3' nor build directory 'build' contain a build file meson.build.
==> ERROR: A failure occurred in build().
    Aborting...

OSDに音量のパーセンテージ表示が出るようにする。

音量を表すスピーカーのアイコン

新しいCinnamonではウィンドウの手前に出るOSDウィンドウから音量のパーセンテージ表示がなくなった。地味に困るのでついでに直す。

sudo cp /usr/share/cinnamon/js/ui/osdWindow.js /usr/share/cinnamon/js/ui/osdWindow.orig
sudo nano /usr/share/cinnamon/js/ui/osdWindow.js

if (this._level.visible) {の次の行にthis.setLabel(value.toString() + ' %');を挿入する。

    setLevel(value) {
        this._level.visible = value != null;
        if (this._level.visible) {
            /* ↓を挿入 */
            this.setLabel(value.toString() + ' %');
            /* ↑を挿入 */
            value = value / 100;
            if (this.visible)
                this._level.ease_property('value', value, {
                    mode: Clutter.AnimationMode.EASE_OUT_QUAD,
                    duration: LEVEL_ANIMATION_TIME,
                });
            else
                this._level.value = value;
        }
    }

Cinnamonを再起動する。

cinnamon-dbus-command RestartCinnamon 1
スピーカーのアイコンに音量の数字が添えられている

これでOK

参考にさせていただいたサイト