elParaguayo / qtile-extras

Somewhere to store things I create for qtile that probably won't end up in the official repo
MIT License
163 stars 19 forks source link

GlobalMenu spams dbus error to qtile logs #361

Closed roverton closed 2 months ago

roverton commented 2 months ago

I've tried placing the GlobalMenu on just one screen, both screens and alternating with no difference. The widget does seem to work just fine for a while and after some time fails and will not work again until I restart X11 (qtile reload doesn't seem to matter).

I suspect this may be specific to my configuration but I've been trying to resolve the issue somehow for quite some time now (6 months or so off and on) and had no luck. This is the section from my log that is bloating them to multiple megabytes in days:

Snippets from v0.26.0 logs

2024-07-09 06:04:33,630 WARNING libqtile __init__.py:start():L160 Path /MenuBar/1 does not present a valid dbusmenu object
2024-07-09 06:04:33,631 ERROR libqtile loop.py:_handle_exception():L62 Exception in event loop:
Traceback (most recent call last):
  File "/usr/lib/python3.12/asyncio/events.py", line 88, in _run
    self._context.run(self._callback, *self._args)
  File "/usr/lib/python3.12/site-packages/qtile_extras/resources/dbusmenu/__init__.py", line 237, in parse_menu
    update_needed, returned_menu = task.result()
                                   ^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/qtile_extras/resources/dbusmenu/__init__.py", line 200, in _get_menu
    menu = await self._interface.call_get_layout(
                 ^^^^^^^^^^^^^^^
AttributeError: 'DBusMenu' object has no attribute '_interface'
2024-07-09 06:36:17,005 ERROR libqtile loop.py:_handle_exception():L62 Exception in event loop:
Traceback (most recent call last):
  File "/usr/lib/python3.12/asyncio/events.py", line 88, in _run
    self._context.run(self._callback, *self._args)
  File "/usr/lib/python3.12/site-packages/qtile_extras/resources/dbusmenu/__init__.py", line 237, in parse_menu
    update_needed, returned_menu = task.result()
                                   ^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/qtile_extras/resources/dbusmenu/__init__.py", line 200, in _get_menu
    menu = await self._interface.call_get_layout(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/dbus_next/aio/proxy_object.py", line 92, in method_fn
    BaseProxyInterface._check_method_return(msg, intr_method.out_signature)
  File "/usr/lib/python3.12/site-packages/dbus_next/proxy_object.py", line 62, in _check_method_return
    raise DBusError._from_message(msg)
dbus_next.errors.DBusError: No such object path '/MenuBar/2'

I have no idea why there is a swap from '/MenuBar/1' to '/MenuBar/2' with similar but different messages either.

Seems like something is going very wrong with dbus but I've got no clue why or how based on the scant information I currently have.

I am running qtile via replacing kwin on plasma 6 (previously plasma 5, no difference to this issue) and doing so via the systemd wants method detailed in the plasma documentation.

Any clues about this is would be greatly appreciated as some software is quite difficult to use without the global menu widget.

roverton commented 2 months ago

Alright, I found a random post from someone complaining that a different appmenu wasn't working for them in plasma because the GlobalMenu would unload without having the widget on a panel. Figured I may as well try to add that to a panel and things changed a bit. Obviously I get a global menu on the plasma panel now which is not ideal, but I can maybe fenagle a solution out of that since it seems I'm a bit in the weeds with using qtile on top of plasma as it is.

Interestingly, the GlobalMenu qtile-extras widget is just plain broken now and I get an immediate error in the qtile logs:

2024-07-09 12:02:10,757 WARNING libqtile __init__.py:start():L160 Path /MenuBar/1 does not present a valid dbusmenu object
2024-07-09 12:02:10,757 ERROR libqtile loop.py:_handle_exception():L62 Exception in event loop:
Traceback (most recent call last):
  File "/usr/lib/python3.12/asyncio/events.py", line 88, in _run
    self._context.run(self._callback, *self._args)
  File "/usr/lib/python3.12/site-packages/qtile_extras/resources/dbusmenu/__init__.py", line 237, in parse_menu
    update_needed, returned_menu = task.result()
                                   ^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/qtile_extras/resources/dbusmenu/__init__.py", line 200, in _get_menu
    menu = await self._interface.call_get_layout(
                 ^^^^^^^^^^^^^^^
AttributeError: 'DBusMenu' object has no attribute '_interface'

Similar again, but different in a few details.

I completely understand at this point if there is just a weird interaction with qtile and plasma that you don't want to deal with/think about and just close this thing out. If you have any idea of how to resolve any of this though, I sure would appreciate some input :)

elParaguayo commented 2 months ago

I'm certainly not going to have time to look at how qtile interacts with plasma but there's a good chance that there's something in plasma that the qtile widget doesn't expect.

If you have problems with the widget in a pure qtile environment then I'd happily take a look

roverton commented 2 months ago

Totally understand. I'll just close the issue. At least it creates a searchable record for anyone else who comes looking about it.

Thanks!