Bug 2439813

Summary: KDE network installs hang during scriptlets (%triggerin on ibus)
Product: [Fedora] Fedora Reporter: Adam Williamson <awilliam>
Component: ibusAssignee: fujiwara <tfujiwar>
Status: CLOSED ERRATA QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: high Docs Contact:
Priority: unspecified    
Version: 44CC: adscvr, alpha, anaconda-maint, bugzilla, fmuellner, gnome-sig, i18n-bugs, jadahl, johan.o.hedin, kkoukiou, kparal, lruzicka, mclasen, mfabian, mkolman, ngompa13, otaylor, petersen, philip.wyett, robatino, tfujiwar, w
Target Milestone: ---Keywords: AutomationTriaged
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard: AcceptedFreezeException
Fixed In Version: ibus-1.5.34~beta1-3.fc44 Doc Type: ---
Doc Text:
Story Points: ---
Clone Of:
: 2442573 (view as bug list) Environment:
Last Closed: 2026-03-05 17:06:10 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 2362358, 2362359    

Description Adam Williamson 2026-02-14 02:14:12 UTC
On both Fedora 44 (branched) and Rawhide currently, if you try to do a network install of KDE, the install process hangs during package scriptlets; it seems to get stuck during %triggerin of the ibus package. The GUI shows "Configuring gtk3.x86_64", but /tmp/dnf5.log shows the gtk3 scriptlet completed with return code 0, then shows 'start' for the ibus %triggerin , but that's the last entry - there's no 'stop' line for ibus. So it seems like we're stuck on ibus.

This has been happening on Fedora 44 since Fedora-44-20260206.n.3, but it only started happening on Rawhide with Fedora-Rawhide-20260210.n.0; the test uses default repos, so it was actually probably installing the package set from the previous compose, Fedora-Rawhide-20260209.n.0 , so that's most likely where the problem appeared in Rawhide. Though I can't see any obviously-related packages in the changelog.

Just installing @core plus ibus (via a kickstart) doesn't reproduce the problem, so some other packages have to be involved somehow.

I'll look into this more next week if nobody else can get to it.

Comment 1 Adam Williamson 2026-02-23 16:17:37 UTC
*** Bug 2441902 has been marked as a duplicate of this bug. ***

Comment 2 Adam Williamson 2026-02-23 16:34:13 UTC
In the dupe, kparal guessed we might actually be in the `dconf update || :` call in %posttrans, which is possible I guess. (It should be fairly easy to check with ps, so I'll take a look in a minute). He also proposed it as a blocker:

"Proposing for F44 blocker discussion. KDE is a release blocking environment, and Everything netinst is a release blocking deliverable."

I'm not sure that holds up, but we can talk about it in the meeting.

Comment 3 Adam Williamson 2026-02-23 17:20:33 UTC
Nope, that's not it. I've just reproduced this and looked at the ps list, and I see `/bin/sh /var/tmp/rpm-tmp.G1eBN2 1`. /mnt/sysimage/var/tmp/rpm-tmp.G1eBN2 says:

[ -x /usr/bin/ibus ] && \
  /usr/bin/ibus write-cache --system &>/dev/null || :

so that's what we're stuck on. I do indeed see an `ibus write-cache --system` process, and a `/usr/bin/python3 /usr/share/ibus-typing-booster/engine/main.py --xml`, and `dbus-launch --autolaunch=(randomstrng) --binary-syntax --close-stderr`.

Comment 4 Kamil Páral 2026-02-23 17:31:49 UTC
Discussed during blocker review meeting on 2025-02-23 [1]:

agreed 2439813 - punt (delay decision) - there's substantial sentiment that this ought to be blocking, but the current criteria don't clearly allow for that. whether the criteria should be adjusted to make this a blocker is a somewhat complex question we don't want to try and resolve live during a meeting, so we'll punt this to allow for more calm consideration of that

[1] https://meetbot-raw.fedoraproject.org//blocker-review_matrix_fedoraproject-org/

Comment 5 Kamil Páral 2026-02-23 17:45:04 UTC
(In reply to Kamil Páral from comment #4)
> Discussed during blocker review meeting on 2025-02-23 [1]:

I almost got the year correct. 2026-02-23.

Comment 6 Adam Williamson 2026-02-23 19:09:23 UTC
Hmm. If I chroot into /mnt/sysimage and run `/usr/bin/ibus write-cache --system`, it runs and returns quite quickly, it doesn't get stuck. Not sure why the scriptlet invocation gets stuck.

Comment 7 Adam Williamson 2026-02-23 19:58:50 UTC
I'm running an install with an ibus build patched to drop the `&>/dev/null` from the ibus write-cache call, so we get the messages from it. It looks like it prints:

INFO [scriptlet] (ibus write-cache:29935): IBUS-WARNING **: 19:50:24.268: Engines exec:/usr/libexec/ibus-engine-table --xml is failed:
INFO [scriptlet]
INFO [scriptlet] (ibus write-cache:29935): IBUS-WARNING **: 19:50:24.373: Engines exec:/usr/libexec/ibus-engine-anthy --xml is failed:

literally that - the messages look like there should be some more text indicating the reason, but there isn't.

If I run the command manually in chroot /mnt/sysimage , I get the same two messages first, but then I also get:

Engines exec:/usr/libexec/ibus-engine-typing-booster --xml is failed:
Engines exec:/usr/libexec/ibus-engine-libpinyin --xml is failed:
Engines exec:/usr/libexec/ibus-engine-m17n --xml is failed:

and a couple other things. That ties in with the apparently-stuck `/usr/bin/python3 /usr/share/ibus-typing-booster/engine/main.py --xml` process, obviously (the next message we're expecting from ibus write-cache is the "Engines exec:/usr/libexec/ibus-engine-typing-booster --xml is failed:" one).

Still don't know why the scriptlet call gets stuck while a manual one works, though.

Comment 8 Adam Williamson 2026-02-23 21:36:01 UTC
OK, took a bit of fiddling but I managed to backtrace the dbus-launch process which seems to be at the bottom of the stuck processes pile, here's the trace:

#0  __internal_syscall_cancel (a1=a1@entry=140722696347344, a2=a2@entry=1, a3=a3@entry=-1, a4=a4@entry=0, a5=a5@entry=0, a6=a6@entry=0, nr=7) at cancellation.c:44
        result = -516
        pd = <optimized out>
        ch = <optimized out>
#1  0x00007f6340e5e234 in __syscall_cancel (a1=a1@entry=140722696347344, a2=a2@entry=1, a3=a3@entry=-1, a4=a4@entry=0, a5=a5@entry=0, a6=a6@entry=0, nr=7) at cancellation.c:75
        r = <optimized out>
#2  0x00007f6340ed843e in __GI___poll (fds=fds@entry=0x7ffc8e53ded0, nfds=nfds@entry=1, timeout=timeout@entry=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
No locals.
#3  0x00007f6340c8dbb0 in poll (__fds=0x7ffc8e53ded0, __nfds=1, __timeout=-1) at /usr/include/bits/poll2.h:44
No locals.
#4  read_block (fd=3, buf=0x558600568ab0, len=8) at /usr/src/debug/libxcb-1.17.0-7.fc44.x86_64/src/xcb_in.c:394
        pfd = {fd = 3, events = 1, revents = 0}
        ret = <optimized out>
        done = 0
#5  _xcb_in_read_block (c=c@entry=0x5586005637d0, buf=0x558600568ab0, len=len@entry=8) at /usr/src/debug/libxcb-1.17.0-7.fc44.x86_64/src/xcb_in.c:1087
        ret = <optimized out>
        done = 0
#6  0x00007f6340c9173e in read_setup (c=0x5586005637d0) at /usr/src/debug/libxcb-1.17.0-7.fc44.x86_64/src/xcb_conn.c:180
        newline = 10 '\n'
#7  xcb_connect_to_fd (fd=fd@entry=3, auth_info=<optimized out>) at /usr/src/debug/libxcb-1.17.0-7.fc44.x86_64/src/xcb_conn.c:386
        c = 0x5586005637d0
#8  0x00007f6340c919cf in xcb_connect_to_display_with_auth_info (displayname=displayname@entry=0x0, auth=auth@entry=0x0, screenp=screenp@entry=0x0) at /usr/src/debug/libxcb-1.17.0-7.fc44.x86_64/src/xcb_util.c:568
        fd = <optimized out>
        display = 1
        host = 0x5586005620f0 ""
        protocol = 0x0
        ourauth = {namelen = 0, name = 0x7f63411b6f31 <_dl_map_object_deps+1057> "H\203\275x\373\377\377", datalen = 1, data = 0x7f6340c8a530 ""}
        c = <optimized out>
        parsed = <optimized out>
#9  0x00007f6340c9225e in xcb_connect (displayname=displayname@entry=0x0, screenp=screenp@entry=0x0) at /usr/src/debug/libxcb-1.17.0-7.fc44.x86_64/src/xcb_util.c:522
No locals.
#10 0x00007f6341016f6a in _XConnectXCB (dpy=0x558600562410, display=0x0, screenp=0x7ffc8e53e26c) at /usr/src/debug/libX11-1.8.12-3.fc44.x86_64/src/xcb_disp.c:78
        host = 0x5586005620f0 ""
        n = 1
        c = <optimized out>
#11 0x00007f634100ea9d in XOpenDisplay (display=display@entry=0x0) at /usr/src/debug/libX11-1.8.12-3.fc44.x86_64/src/OpenDis.c:129
        dpy = 0x558600562410
        i = <optimized out>
        j = <optimized out>
        k = <optimized out>
        display_name = 0x5586005620d0 ":1"
        setup = 0x0
        iscreen = 0
        prefix = <optimized out>
        vendorlen = <optimized out>
        u = <optimized out>
        setuplength = <optimized out>
        usedbytes = 0
        mask = <optimized out>
        conn_buf_size = <optimized out>
        xlib_buffer_size = <optimized out>
#12 0x00005585c27ce1a3 in open_x11 () at ../tools/dbus-launch-x11.c:229
No locals.
#13 x11_init () at ../tools/dbus-launch-x11.c:472
        ok = <optimized out>
#14 0x00005585c27cbf12 in main (argc=4, argv=0x7ffc8e53ea18) at ../tools/dbus-launch.c:1060
        prev_arg = 0x7ffc8e540aed "--close-stderr"
        shname = <optimized out>
        runprog = <optimized out>
        remaining_args = <optimized out>
        exit_with_session = <optimized out>
        exit_with_x11 = 1
        binary_syntax = <optimized out>
        c_shell_syntax = 0
        bourne_shell_syntax = 0
        auto_shell_syntax = <optimized out>
        autolaunch = 1
        requires_arg = <optimized out>
        close_stderr = <optimized out>
        i = <optimized out>
        ret = <optimized out>
        bus_pid_to_launcher_pipe = {1089986000, 32611}
        bus_pid_to_babysitter_pipe = {-1907104524, 32764}
        bus_address_to_launcher_pipe = {-1907104520, 32764}
        config_file = 0x0
        existing_bus_supported = 0
        existing_bus = {dummy1 = 0x0, dummy2 = 0, dummy3 = 0, dummy_bit1 = 0, dummy_bit2 = 0, dummy_bit3 = 0, dummy_bits = 0}
        error_str = 0x0
        error = {name = 0x0, message = 0x0, dummy1 = 1, dummy2 = 0, dummy3 = 0, dummy4 = 0, dummy5 = 0, padding1 = 0x0}

so we're in X init stuff, here...theory: because the installer is running in a graphical environment we get into this codepath and get stuck, but when I do chroot /mnt/sysimage and run the command from a tty on vt3, we're *not* a graphical environment so we don't hit this codepath and everything's fine?

Comment 9 Adam Williamson 2026-02-23 22:52:25 UTC
Another interesting finding: despite the fact that this happens during the install process in a scriptlet run in the installed system root, the bug depends on the *installer environment*. If I use the 20260209.n.0 netinst image, the bug doesn't happen, no matter whether I use the 20260209.n.0, 20260210.n.0 or today's compose as the repository. If I use the 20260210.n.0 netinst, or today's netinst, the bug always happens, even if I use the 20260209.n.0 compose as the install repo.

So, something changed in the installer environment between 0209.n.0 and 0210.n.0 that triggers this, somehow. The changelog is at https://lists.fedoraproject.org/archives/list/test-reports@lists.fedoraproject.org/thread/PPRJACJZSSRQMZ5SJKWNPNFRAYIZHCAD/ .

Comment 10 Adam Williamson 2026-02-24 00:28:41 UTC
I was all set to guess that glib2 would be the culprit and get into bisecting it, only...it seems not to be. I tried both an updates.img with the previous glib2 build in it and a custom netinst ISO build with a '2.87.3' which is actually just a rebuild of 2.87.0, and both of those still hit the bug. So it must be something else, but nothing else looks as obvious of a suspect unfortunately. Possibly glibc? There's no changes to dbus or ibus-related bits that I can see, or libxcb, or anaconda. I guess gnome-kiosk is another vaguely plausible suspect? I'll keep trying options.

Comment 11 Adam Williamson 2026-02-24 01:21:04 UTC
OK, I think this is somewhere in the gnome-shell / gnome-kiosk / mutter triad. https://adamwill.fedorapeople.org/updates-gs49.img is an updates.img containing the files from gnome-kiosk-49.0-4.fc44.x86_64.rpm , gnome-shell-49.2-4.fc44.x86_64.rpm and mutter-49.2-8.fc44.x86_64.rpm - I built it with:

[adamw@toolbx fedora-toolbox-43 anaconda (main %)]$ ./scripts/makeupdates -a ~/Downloads/gnome-kiosk-49.0-4.fc44.x86_64.rpm ~/Downloads/gnome-shell-49.2-4.fc44.x86_64.rpm ~/Downloads/mutter-49.2-8.fc44.x86_64.rpm

if I run a KDE install from the 20260210.n.0 Rawhide netinst using that updates.img , it completes successfully. If I run the same install from the same netinst without the updates.img, it hits the bug.

Another thing I forgot to post earlier, trimmed backtrace of the /usr/bin/python3 /usr/share/ibus-typing-booster/engine/main.py --xml process showing it is indeed the thing that spawned the dbus-launch process, via gtk and glib (I cut it off at the point where we get back into python gobject-introspection):

#0  __syscall_cancel_arch () at ../sysdeps/unix/sysv/linux/x86_64/syscall_cancel.S:56
No locals.
#1  0x00007efdd44751ec in __internal_syscall_cancel (a1=<optimized out>, a2=<optimized out>, a3=<optimized out>, a4=a4@entry=0, a5=a5@entry=0, a6=a6@entry=0, nr=7) at cancellation.c:49
        result = <optimized out>
        pd = <optimized out>
        ch = <optimized out>
#2  0x00007efdd4475234 in __syscall_cancel (a1=<optimized out>, a2=<optimized out>, a3=<optimized out>, a4=a4@entry=0, a5=a5@entry=0, a6=a6@entry=0, nr=7) at cancellation.c:75
        r = <optimized out>
#3  0x00007efdd44ef43e in __GI___poll (fds=<optimized out>, nfds=<optimized out>, timeout=<optimized out>) at ../sysdeps/unix/sysv/linux/poll.c:29
No locals.
#4  0x00007efdc5d0c26c in g_spawn_sync_impl (working_directory=0x0, argv=<optimized out>, envp=0x0, flags=G_SPAWN_SEARCH_PATH, child_setup=0x0, user_data=0x0, standard_output=<optimized out>, standard_error=<optimized out>, wait_status=0x7ffe3c39afc4, error=0x7ffe3c39b048) at ../glib/gspawn-posix.c:284
        fds = {{fd = 5, events = 25, revents = 0}, {fd = 7, events = 25, revents = 0}}
        outpipe = 5
        errpipe = 7
        pid = 29723
        ret = <optimized out>
        outstr = 0x563d19ee31a0
        errstr = <optimized out>
        failed = 0
        status = 22077
        __func__ = <optimized out>
        _g_boolean_var_10 = <optimized out>
        _g_boolean_var_11 = <optimized out>
        _g_boolean_var_12 = <optimized out>
        _g_boolean_var_13 = <optimized out>
        _g_boolean_var_14 = <optimized out>
#5  g_spawn_sync (working_directory=working_directory@entry=0x0, argv=<optimized out>, envp=envp@entry=0x0, flags=flags@entry=G_SPAWN_SEARCH_PATH, child_setup=child_setup@entry=0x0, user_data=user_data@entry=0x0, standard_output=0x7ffe3c39afd0, standard_error=0x7ffe3c39afc8, wait_status=0x7ffe3c39afc4, error=0x7ffe3c39b048) at ../glib/gspawn.c:153
        __func__ = "g_spawn_sync"
#6  0x00007efdc5d0c67f in g_spawn_command_line_sync (command_line=command_line@entry=0x563d19ee2ff0 "dbus-launch --autolaunch=51ec2262ee88469f9a84975e48057f59 --binary-syntax --close-stderr", standard_output=standard_output@entry=0x7ffe3c39afd0, standard_error=standard_error@entry=0x7ffe3c39afc8, wait_status=wait_status@entry=0x7ffe3c39afc4, error=error@entry=0x7ffe3c39b048) at ../glib/gspawn.c:590
        retval = <optimized out>
        argv = 0x563d19ee3250
        __func__ = "g_spawn_command_line_sync"
#7  0x00007efdc475b267 in get_session_address_dbus_launch (error=error@entry=0x7ffe3c39b048) at ../gio/gdbusaddress.c:1143
        ret = 0x0
        machine_id = 0x563d19ee2fc0 "51ec2262ee88469f9a84975e48057f59"
        command_line = 0x563d19ee2ff0 "dbus-launch --autolaunch=51ec2262ee88469f9a84975e48057f59 --binary-syntax --close-stderr"
        launch_stdout = 0x0
        launch_stderr = 0x0
        wait_status = 32766
        old_dbus_verbose = 0x0
        restore_dbus_verbose = 0
#8  0x00007efdc475cda4 in get_session_address_platform_specific (error=0x7ffe3c39b048) at ../gio/gdbusaddress.c:1258
        ret = <optimized out>
#9  g_dbus_address_get_for_bus_sync (bus_type=G_BUS_TYPE_SESSION, cancellable=0x0, error=0x0) at ../gio/gdbusaddress.c:1354
        has_elevated_privileges = 0
        ret = <optimized out>
        s = <optimized out>
        starter_bus = <optimized out>
        local_error = 0x0
        __func__ = "g_dbus_address_get_for_bus_sync"
#10 0x00007efdc476f566 in get_uninitialized_connection (bus_type=bus_type@entry=G_BUS_TYPE_SESSION, cancellable=cancellable@entry=0x0, error=error@entry=0x0) at ../gio/gdbusconnection.c:7979
        address = <optimized out>
        singleton = 0x7efdc486a008 <the_session_bus>
        ret = 0x0
        __func__ = "get_uninitialized_connection"
#11 0x00007efdc476f62e in g_bus_get_sync (bus_type=bus_type@entry=G_BUS_TYPE_SESSION, cancellable=cancellable@entry=0x0, error=error@entry=0x0) at ../gio/gdbusconnection.c:8079
        connection = <optimized out>
        __func__ = "g_bus_get_sync"
#12 0x00007efdc328c6b5 in environment_has_portals () at ../gdk/gdk.c:464
        bus = 0x0
        result = 0x0
        activatable_names = 0x0
        name = 0x0
        error = 0x0
        cached = <optimized out>
        has_portals = <optimized out>
        __func__ = <optimized out>
#13 gdk_display_should_use_portal (display=<optimized out>, portal_interface=0x0, min_version=0) at ../gdk/gdk.c:642
        sandboxed = <optimized out>
#14 gdk_display_should_use_portal (display=<optimized out>, portal_interface=0x0, min_version=0) at ../gdk/gdk.c:619
        sandboxed = <optimized out>
#15 0x00007efdc32b07f7 in file_transfer_portal_register () at ../gdk/filetransferportal.c:606
        called = <optimized out>
#16 0x00007efdc2f2de61 in file_transfer_portal_register () at ../gdk/gdk.c:239
        called = <optimized out>
        _pp = <optimized out>
        _ptr = <optimized out>
#17 gdk_content_init_serializers () at ../gdk/gdkcontentserializer.c:1054
        formats = <optimized out>
        f = <optimized out>
        charset = 0x0
        initialized = <optimized out>
#18 gdk_content_init_serializers () at ../gdk/gdkcontentserializer.c:966
        formats = <optimized out>
        f = <optimized out>
        charset = <optimized out>
        initialized = <optimized out>
        fmt = <optimized out>
        mimes = <optimized out>
        m = <optimized out>
        name = <optimized out>
        mime = <optimized out>
#19 gdk_pre_parse () at ../gdk/gdk.c:357
        disabled_features = <optimized out>
#20 do_pre_parse_initialization () at ../gtk/gtkmain.c:524
        env_string = <optimized out>
        slowdown = <optimized out>
        __func__ = <optimized out>
#21 gtk_init_check () at ../gtk/gtkmain.c:658
        ret = <optimized out>
        __func__ = <optimized out>
#22 gtk_init_check () at ../gtk/gtkmain.c:643
        ret = <optimized out>
        __func__ = "gtk_init_check"
#23 0x00007efdc5c0c056 in ffi_call_unix64 () at ../src/x86/unix64.S:104
No locals.
#24 0x00007efdc5c0805c in ffi_call_int (cif=cif@entry=0x563d19eda5c0, fn=fn@entry=0x7efdc2f2cc10 <gtk_init_check>, rvalue=<optimized out>, rvalue@entry=0x7ffe3c39b520, avalue=avalue@entry=0x0, closure=closure@entry=0x0) at ../src/x86/ffi64.c:676
        classes = {435004864, 22077, 1010414832, 32766}
        stack = <optimized out>
        argp = 0x7ffe3c39b370 "\003"
        arg_types = <optimized out>
        gprcount = 0
        ssecount = <optimized out>
        ngpr = 32509
        nsse = -976775186
        i = <optimized out>
        avn = <optimized out>
        flags = <optimized out>
        reg_args = <optimized out>
#25 0x00007efdc5c0ad8e in ffi_call (cif=cif@entry=0x563d19eda5c0, fn=0x7efdc2f2cc10 <gtk_init_check>, rvalue=rvalue@entry=0x7ffe3c39b520, avalue=0x0) at ../src/x86/ffi64.c:713
        arg_types = <optimized out>
        i = <optimized out>
        nargs = <optimized out>
        max_reg_struct_size = <optimized out>
#26 0x00007efdc5e3a080 in pygi_invoke_c_callable (function_cache=0x563d19eda530, state=<optimized out>, py_args=<optimized out>, py_nargsf=<optimized out>, py_kwnames=<optimized out>) at ../gi/pygi-invoke.c:722
        _save = 0x7efdd4c3c560 <_PyRuntime+315648>
        cache = 0x563d19eda530
        ffi_return_value = {v_boolean = 0, v_int8 = 0 '\000', v_uint8 = 0 '\000', v_int16 = 0, v_uint16 = 0, v_int32 = 0, v_uint32 = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_short = 0, v_ushort = 0, v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_ssize = 0, v_size = 0, v_string = 0x0, v_pointer = 0x0}
        ret = 0x0

Comment 12 Fedora Admin user for bugzilla script actions 2026-02-24 01:21:14 UTC
Bug reports for this component on Red Hat Bugzilla are not actively monitored. Please consider reporting your issue directly to GNOME at https://gitlab.gnome.org/GNOME/ to improve the chances that your issue will be resolved. This issue should only be kept open if it:

1. Relates to Fedora packaging or integration with other Fedora components
2. Is required for Fedora release processes, such as blocker bugs and freeze exceptions

If this issue isn't needed for either of these two reasons, please:

 * create an issue with GNOME
 * add a link to the GNOME issue here
 * close this issue as CLOSED/UPSTREAM

Thank you!

Comment 13 fujiwara 2026-02-24 04:53:53 UTC
ibus-daemon should not require to open any displays so I'd always say ibus-typing-booster should not open a display with "--xml" option.

But ibus-anthy does not require any displays with "--xml" option.

(In reply to Adam Williamson from comment #7)
> INFO [scriptlet] (ibus write-cache:29935): IBUS-WARNING **: 19:50:24.373:
> Engines exec:/usr/libexec/ibus-engine-anthy --xml is failed:

> Engines exec:/usr/libexec/ibus-engine-typing-booster --xml is failed:
> Engines exec:/usr/libexec/ibus-engine-libpinyin --xml is failed:
> Engines exec:/usr/libexec/ibus-engine-m17n --xml is failed:


I'm not sure why the script was failed.
You could run `/usr/libexec/ibus-engine-anthy --xml` command locally by manual and notice it just combines the XML strings.

Comment 14 Adam Williamson 2026-02-24 06:40:18 UTC
The failures per se aren't necessarily a problem unless we really need these commands to actually *work* at install time (I'm assuming not since all it's doing is building/updating a cache). It's not uncommon for scriptlets running in the installer chroot environment to fail as it's a somewhat odd environment. It's the hang that's the problem, as it prevents the transaction completing.

Comment 15 Matthias Clasen 2026-02-24 16:07:49 UTC
I would consider this an ibus (more specifically ibus-typing-booster) bug if it runs something in a trigger that tries to open a display or a dbus connection, or somesuch.

That being said, dbus calls should still time out after 25 seconds, allowing things to eventually fail. What is the deadlock here ?

Comment 16 Adam Williamson 2026-02-24 17:35:44 UTC
I don't know. All I know is up above: the fact that the hang started happening with the GNOME 50 update, and the backtraces of the stuck processes.

I'm looking at ibus-typing-booster now and it looks like it does specifically try to *not* do anything that would open a display when running in the --xml mode, e.g. there's a long comment about it here:

https://github.com/mike-fabian/ibus-typing-booster/blob/c0bac5f73142c7f2cd846741402b7d627e909035/engine/main.py#L138

In the XML mode, large chunks of main.py are skipped. Essentially all that actually gets run is the environment discovery stuff and arg parsing at the start, the imports from xml.etree.ElementTree , and the write_xml() function. The IMApp class never gets instantiated. I'm trying now to think/see how it could still wind up in us getting into display code. I guess we also don't know how exactly the behaviour changed with GNOME 50. Did this display code path not get hit at all with GNOME 49? Or did we still hit it, but it didn't hang? I guess the latter is more likely, but I don't know for sure.

Comment 17 Adam Williamson 2026-02-24 17:39:33 UTC
aha, so, main.py (unconditionally) imports itb_util.py , and itb_util.py imports Gdk and Gtk from itb_gtk . That's one obvious thing. There's also code in write_xml which is explicitly poking at desktop-y stuff:

        symbol = '🚀'
        if (itb_util.is_desktop('gnome')
            and itb_util.get_gnome_shell_version() >= (48, 3)):
            # If running on Gnome and gnome-shell is new enough to contain
            # https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3753
            # make the symbol black and white:
            symbol = '🚀\uFE0E'

so, all of that likely has something to do with this. I'll go do some git blame'ing on all this stuff and see if there's a pattern where the idea of avoiding display code in the XML output path got lost over time...

Comment 18 Adam Williamson 2026-02-24 17:46:47 UTC
Yeah, looks like that's the case.

The big long comment comes from 2021: https://github.com/mike-fabian/ibus-typing-booster/commit/93ce0203c
The import of itb_util comes from 2024: https://github.com/mike-fabian/ibus-typing-booster/commit/e87d24c51
The code snippet in the previous comment comes from June 2025: https://github.com/mike-fabian/ibus-typing-booster/commit/295ae18e

so it does look like when adding various enhancements in 2024 and 2025, Mike might've forgotten about trying to avoid setting up a display on the --xml path.

Comment 19 Fedora Update System 2026-02-24 21:26:58 UTC
FEDORA-2026-d8b30d5a3b (ibus-1.5.34~beta1-3.fc44) has been submitted as an update to Fedora 44.
https://bodhi.fedoraproject.org/updates/FEDORA-2026-d8b30d5a3b

Comment 20 Adam Williamson 2026-02-24 22:50:50 UTC
The update uses a suggestion from mclasen: it runs the trigger scriptlets via `env -i` so all environment variables are unset. This either avoids us going down the gdk->dbus-session path at all, or makes it not hang, we don't know which (probably the former), but it works. We suspect the install transaction uses the *installer environment's* environment variables (despite the fact it's installing into a chroot), which might or might not be considered a bug in itself, but we probably shouldn't poke it during a beta freeze; just changing these scriptlets is safer.

So there are a few different things here:

1) ibus-typing-booster should go back to avoiding the gtk/gdk path when just doing --xml. We can probably achieve that by separating the m17n bits it really needs in itb_util out from the rest of it.
2) arguably, all the desktop environment detection stuff in ibus-typing-booster is fragile at least for use in RPM scriptlets, because those don't always run within the same environment in which ibus-typing-booster will actually be used (e.g. when doing offline updates, as well as in this installer path).
3) there probably is a bug of some kind in gnome-shell/gnome-kiosk/mutter here, since we survived ibus-typing-booster going down the gtk/gdk path with GNOME 49, but we don't with GNOME 50.
4) we might want to consider dropping some or all of the installer environment's env vars from the set used for running the install package transaction.

Since there are criteria issues around accepting this as a blocker, but we have a fix/workaround now, I'm proposing it as an FE so we can get the fix in without worrying about the criteria.

Comment 21 Fedora Update System 2026-02-24 23:10:20 UTC
FEDORA-2026-d8b30d5a3b has been pushed to the Fedora 44 testing repository.
Soon you'll be able to install the update with the following command:
`sudo dnf upgrade --enablerepo=updates-testing --refresh --advisory=FEDORA-2026-d8b30d5a3b`
You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-2026-d8b30d5a3b

See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.

Comment 22 Adam Williamson 2026-02-24 23:22:30 UTC
+3 FE in https://pagure.io/fedora-qa/blocker-review/issue/2048 , marking accepted.

Comment 23 fujiwara 2026-02-25 01:53:09 UTC
@Adam Williamson:
Thank you for the evaluation.

If we will enhance ibus-typing-booster, it would be better to fork this bug to the new one since a change was applied to ibus this time.

Comment 24 Jens Petersen 2026-02-25 09:18:26 UTC
Good point - I cloned bug 2442573 for Mike to look at when he is back.

> The failures per se aren't necessarily a problem unless we really need these commands to actually *work* at install time

I just wanted to add/comment that I don't think the --xml output nor write-cache processes should fail during installation.
That is not okay.


Anyway I did a quick Live test of Fedora-Workstation-Live-Rawhide-20260225.n.0.x86_64.iso and it seems to be working fine so far.

Comment 25 Adam Williamson 2026-02-25 16:39:56 UTC
The fix for this is in development/rawhide now, so you should probably be able to test it by doing a normal KDE network install of Rawhide. To test 44 specifically you'd have to enable updates-testing - you can't do this in the GUI any more, unfortunately, but you can use a kickstart or boot with:

inst.addrepo=ut,https://dl.fedoraproject.org/pub/fedora/linux/updates/testing/44/Everything/x86_64/

I've just done that and it works for me, would be good if others can confirm.

Comment 26 Johan Hedin 2026-02-25 19:31:08 UTC
Can confirm that netinstall of KDE now works as expected for me when adding the updates testing repo during install!

Thanks for the good work on this one!

Comment 27 Kamil Páral 2026-02-27 08:41:08 UTC
Thanks for testing, Johan, marking as verified.

Comment 28 Adam Williamson 2026-02-27 17:08:37 UTC
If anyone else can karma the update, I can push it stable and close this out...

Comment 29 Lukas Ruzicka 2026-03-02 19:41:39 UTC
Discussed on the Fedora Blocker Review Meeting on March, 2nd 2026 with the resolution.

Rejected Beta Blocker, proposed Final Blocker

See https://meetbot.fedoraproject.org/blocker-review_matrix_fedoraproject-org/2026-03-02/f44-blocker-review.2026-03-02-17.00.log.txt

Comment 30 Fedora Update System 2026-03-05 17:06:10 UTC
FEDORA-2026-d8b30d5a3b (ibus-1.5.34~beta1-3.fc44) has been pushed to the Fedora 44 stable repository.
If problem still persists, please make note of it in this bug report.