GNOME Calls 50.0 builds one origin per appearance of the modem's VoiceCallManager interface and never disconnects a removed origin's CallAdded handler, so every withdraw/re-add cycle leaves a stale handler behind: calls announced twice after one cycle, a SIGBUS on freed memory after a few (measured on a Fairphone 6). Withdrawing the interface on every imsd restart or registration drop therefore cost the only incoming call path on Phosh, where Calls runs as the session's daemon. List the interface permanently. Registration is reported through the modem's Online property and enforced in Dial, which now fails with "imsd is not registered" or "imsd is not running". Only this daemon's own restart (org.ofono vanishing) still cycles the origin, and the README says to restart Calls after that. Installing the opt-in imsd-ofono subpackage now enables imsd-ofonod (a systemd preset plus the wants symlink, like imsd.service in the main package), and imsd-dialerd's autostart is limited to KDE so a Phosh session does not run the Plasma shim. Verified on the FP6 under Phosh with GNOME Calls' autostarted daemon: outgoing call, incoming call answered on the lock screen, then an imsd restart under the running Calls (Online changes only, no origin cycle) followed by another incoming call added once and answered.
54 lines
2.2 KiB
Text
54 lines
2.2 KiB
Text
# SPDX-License-Identifier: GPL-3.0-only
|
|
# SPDX-FileCopyrightText: Copyright (C) 2026 Catcrafts®
|
|
# Maintainer: Jorijn van der Graaf <jorijnvdgraaf@catcrafts.net>
|
|
pkgname=imsd
|
|
pkgver=0.3.0
|
|
pkgrel=0
|
|
pkgdesc="Userspace IMS/VoLTE daemon for mainline Linux phones"
|
|
url="https://forgejo.catcrafts.net/Catcrafts/imsd"
|
|
arch="aarch64 x86_64"
|
|
license="GPL-3.0-only"
|
|
# the media leg dlopen's the AMR-WB codecs; pw-record/pw-play drive PipeWire —
|
|
# none of which abuild's .so auto-scan can see
|
|
depends="modemmanager opencore-amr vo-amrwbenc pipewire-tools"
|
|
# clang/libc++ C++26 modules build (see Makefile); llvm-runtimes ships the
|
|
# libc++ std module sources (/usr/share/libc++/v1/std.cppm) it precompiles
|
|
makedepends="clang lld libc++-dev llvm-libunwind-dev llvm-runtimes glib-dev pkgconf"
|
|
# the versioned provides both satisfies soc-qcom-modem's 81voltd dependency
|
|
# and excludes the real package: 81voltd serves the modem's own ims-PDN
|
|
# requests, which races imsd for the PDN and flaps it with a new prefix every
|
|
# ~2.5 min — the two IMS stacks cannot share one PDN
|
|
provides="81voltd=$pkgver-r$pkgrel"
|
|
# imsd-ofono is opt-in: it carries the org.ofono shim that lets GNOME Calls
|
|
# (Phosh, GNOME Mobile) drive imsd, plus the gschema override that repoints
|
|
# Calls at the ofono provider. A Plasma Mobile phone wants imsd-dialerd, which
|
|
# is in the main package, and must NOT get that override.
|
|
subpackages="$pkgname-ofono:ofono"
|
|
source="$pkgname-$pkgver.tar.gz::$url/archive/v$pkgver.tar.gz"
|
|
builddir="$srcdir/$pkgname"
|
|
|
|
build() {
|
|
make
|
|
}
|
|
|
|
check() {
|
|
make check
|
|
}
|
|
|
|
package() {
|
|
make install DESTDIR="$pkgdir"
|
|
}
|
|
|
|
ofono() {
|
|
pkgdesc="GNOME Calls (Phosh, GNOME Mobile) backend for imsd"
|
|
depends="$pkgname=$pkgver-r$pkgrel calls"
|
|
amove usr/bin/imsd-ofonod
|
|
amove usr/lib/systemd/system/imsd-ofonod.service
|
|
amove usr/share/dbus-1/system.d/imsd-ofono.conf
|
|
amove usr/share/glib-2.0/schemas/90_imsd-ofono.gschema.override
|
|
amove usr/lib/systemd/system-preset/80-imsd-ofono.preset
|
|
# enabled on install, like imsd.service in the main package
|
|
mkdir -p "$subpkgdir"/etc/systemd/system/multi-user.target.wants
|
|
ln -s /usr/lib/systemd/system/imsd-ofonod.service \
|
|
"$subpkgdir"/etc/systemd/system/multi-user.target.wants/imsd-ofonod.service
|
|
}
|