ALVINE

ManjaroのCinnamonで音量調整の段階を小さくする

新規公開
最終更新

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と表示されたボタン

PKGBUILDを見つけたらページ右側にソースファイルを表示するボタンがあるのでそれをクリックして開き,そのURLをwgetでダウンロードする。(それかCtrl + Sしてブラウザで保存するのでもいい。)

$ wget "https://gitlab.archlinux.org/archlinux/packaging/packages/cinnamon-settings-daemon/-/raw/main/PKGBUILD"

ダウンロードできたらsourceのディレクトリを書き換える。

まずローカルにあるファイルからビルドするので必ずsource=("${pkgname}.tar.gz")となるように。あとは全体的に${pkgname}-${pkgver}というバージョン固有の記述がないかも注意すること。

# Maintainer: Bruno Pagani <archange@archlinux.org>
# Contributor: Eli Schwartz <eschwartz@archlinux.org>
# Contributor: Alexandre Filgueira (faidoc) <alexfilgueira@antergos.com>
# Contributor: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>

pkgname=cinnamon-settings-daemon
pkgver=6.6.2
pkgrel=1
pkgdesc='Settings daemon for Cinnamon'
arch=(x86_64)
url='https://github.com/linuxmint/cinnamon-settings-daemon'
license=('GPL-2.0-or-later AND LGPL-2.0-or-later')
depends=(
  cairo
  cinnamon-desktop
  dconf
  fontconfig
  gcc-libs
  gdk-pixbuf2
  glib2
  glibc
  gtk3
  hicolor-icon-theme
  lcms2
  libcanberra-pulse
  libcolord
  libcups
  libgudev
  libnotify
  libwacom
  libx11
  libxext
  libxi
  nspr
  nss
  pango
  polkit
  pulse-native-provider
  systemd-libs
  upower
)
optdepends=('cinnamon-translations: i18n')
makedepends=(
  git
  glib2-devel
  meson
)
# ↓ ここの行を書き換える
# source=("git+https://github.com/linuxmint/cinnamon-settings-daemon.git#tag=$pkgver")
source=("${pkgname}.tar.gz")
# ↓ ここの行は次のステップで書き換える
b2sums=('177f73765b4788ce41243c82090acd47f372496c4364c3818186695e0ad9002911fd9f41ae24192799d1692c27d9601745762a76ffd1d339b54fcfee09d8a99c')

build() {
  arch-meson $pkgname build \
    --libexecdir=lib/$pkgname
  meson compile -C build
}

package() {
  meson install -C build --destdir="$pkgdir"
}

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

チェックサムの改変

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

$ makepkg -g
# ==> Retrieving sources...
#   -> Found cinnamon-settings-daemon.tar.gz
# ==> Generating checksums for source files...
# b2sums=('b31dccff126dba8823089d883380eccff0da7ae40609c6b648c67a06e37057656ece7482f7c00cf80830d95e6f91d510b86f1619e5754b02a729582046f78ed9')

PKGBUILDのb2sums=('......')という行をここで得たb2sumsの内容で置き換える。

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

追記() : 正しくスタイルが当たっておらず音量バーが表示されていませんでした。

正しく表示できた画像

正しく表示できた場合,このようになります。

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

更新履歴

: 画像を追加。あたらしいPKGBUILDで内容を書き換え。わかりにくい記述を修正。