Hi,

I just learned that volumeicon had been removed from Debian,
although it still works except for a bug in glycin. :-(
(It's high quality software that didn't need updates in
almost 10 years and still has happy users!)

Here is the workaround:

  volumeicon & sleep 2; pkill -P `pidof volumeicon` bwrap


There is a hanging bwrap process in the "Testing bwrap
availability" step, killing it makes glycin continue
to load volumeicon's icons:

$ G_MESSAGES_DEBUG=all volumeicon
(volumeicon:15428): GLib-DEBUG: 19:33:03.485: unsetenv() is not thread-safe and 
should not be used after threads are created
(volumeicon:15428): GLib-GIO-DEBUG: 19:33:03.487: _g_io_module_get_default: 
Found default implementation local (GLocalVfs) for ‘gio-vfs’
2026-03-15T18:33:03.515856Z DEBUG glycin::gobject: Initialized logging
2026-03-15T18:33:03.518332Z DEBUG glycin::sandbox: Testing bwrap availability 
with: "bwrap" "--unshare-all" "--die-with-parent" "--chdir" "/" "--ro-bind" 
"/usr" "/usr" "--dev" "/dev" "--ro-bind-try" "/etc/ld.so.cache" 
"/etc/ld.so.cache" "--ro-bind-try" "/nix/store" "/nix/store" "--tmpfs" 
"/tmp-home" "--tmpfs" "/tmp-run" "--clearenv" "--setenv" "HOME" "/tmp-home" 
"--setenv" "XDG_RUNTIME_DIR" "/tmp-run" "--symlink" "/usr/lib32" "/lib32" 
"--symlink" "/usr/lib64" "/lib64" "--symlink" "/usr/lib" "/lib" "--symlink" 
"/usr/libx32" "/libx32" "--seccomp" "12" "/usr/bin/true"
2026-03-15T18:34:33.126481Z  INFO glycin::sandbox: Can't determine if bwrap 
syscalls are blocked: IO error: No child processes (os error 10)  (StdIoError { 
err: Os { code: 10, kind: Uncategorized, message: "No child processes" }, info: 
"" }
)
...

After this bwrap is killed glycin gets an error but continues
anyway. Running the bwrap command alone in a shell (without
seccomp) doesn't hang, only when glycin calls it. The key
difference in strace is that /usr/bin/true exits wait4 returns
ECHILD instead of its exit status:

glycin:
16665 20:09:11.648386 exit_group(0)     = ?
16665 20:09:11.648590 +++ exited with 0 +++
16663 20:09:11.648604 <... wait4 resumed>, 0x7fff013f71c4, 0, NULL) = -1 ECHILD 
(No child processes)
16663 20:09:11.648778 exit_group(1)     = ?
16663 20:09:11.649339 +++ exited with 1 +++
(parent process hangs in poll())

shell:
17067 20:31:48.320606 exit_group(0)     = ?
17067 20:31:48.320795 +++ exited with 0 +++
17065 20:31:48.320822 <... wait4 resumed>, [{WIFEXITED(s) && WEXITSTATUS(s) == 
0}], 0, NULL) = 2
17065 20:31:48.320874 write(4, "\1\0\0\0\0\0\0\0", 8) = 8
17065 20:31:48.320949 wait4(-1 <unfinished ...>
17064 20:31:48.320968 <... poll resumed>) = 1 ([{fd=4, revents=POLLIN}])
17065 20:31:48.320997 <... wait4 resumed>, 0x7ffde3999754, 0, NULL) = -1 ECHILD 
(No child processes)
17064 20:31:48.321022 read(4, "\1\0\0\0\0\0\0\0", 8) = 8
17064 20:31:48.321151 exit_group(0 <unfinished ...>
17065 20:31:48.321174 exit_group(0 <unfinished ...>


This issue should be reassigned to the rust-glycin package.

It's apparently also a bwrap bug that it hangs in this case,
child brwap process exits with error status without writing to the pipe
to wake up the parent process.


Best Regards,
Johannes

Reply via email to