Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add initial support for Miriway #40

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

Conan-Kudo
Copy link

Miriway is a new generic compositor built on the Mir compositor library that is designed to be used as part of composable desktop environments.

@stefonarch
Copy link
Member

stefonarch commented Nov 3, 2024

Nice!
How can Miriway be compiled on Arch? I didn't find a easy way (no AUR package). Does it support wlroots (for the panel taskbar backend)?

@Conan-Kudo
Copy link
Author

It supports the required wlr- protocols, yes.

@Conan-Kudo Conan-Kudo force-pushed the miriway branch 2 times, most recently from e098447 to 6bda9f7 Compare November 3, 2024 11:55
@Conan-Kudo
Copy link
Author

And it should work alongside lxqt/lxqt-panel#2161

@stefonarch
Copy link
Member

stefonarch commented Jan 15, 2025

Looked a little bit into this, setting up snapd on arch.

  • first error I got was permission denied to execute lxqt-miriway-wrapper. IMO this shouldn't be installed to /usr/share and generally we don't want install executables for compositors here.
  • inotify-tools is a new dependency
  • miriway-shell wasn't found as it's not in my $PATH
  • now I get
[2025-01-15 10:00:28.437729] < - ERROR - > mircommon: Failed to load libraries from path: /usr/lib/x86_64-linux-gnu/mir/server-platform (error was:/usr/lib/x86_64-linux-gnu/mir/server-platform: No such file or directory)
ERROR: ./src/server/graphics/default_configuration.cpp(198): Throw in function virtual const std::vector<std::shared_ptr<mir::graphics::DisplayPlatform> >& mir::DefaultServerConfiguration::the_display_platforms()
Dynamic exception type: boost::wrapexcept<std::runtime_error>
std::exception::what: Exception while creating graphics platform
ERROR: Dynamic exception type: std::system_error
std::exception::what: /usr/lib/x86_64-linux-gnu/mir/server-platform: No such file or directory

Tried to compile Mir, but no, that's too much consuming and I stopped here.

@sfalken
Copy link

sfalken commented Jan 15, 2025

It's packaged and working fine on openSUSE Tumbleweed (mir/miriway) Just hasn't been submitted into Factory as of yet.

@Conan-Kudo
Copy link
Author

It is also packaged and available in Fedora Rawhide, and available for Fedora 41 in COPR.

@stefonarch
Copy link
Member

Oh... there are packages for something which isn't merged?
As miriway is snap-only if I understood it right I see no way how we can support it if testing isn't possible on arch with official packages, without relying on AUR.

@Conan-Kudo
Copy link
Author

I could provide patched packages for the whole thing on Fedora if it would help.

@sfalken
Copy link

sfalken commented Jan 15, 2025

It's packaged and working fine on openSUSE Tumbleweed (mir/miriway) Just hasn't been submitted into Factory as of yet.

Oh... there are packages for something which isn't merged? As miriway is snap-only if I understood it right I see no way how we can support it if testing isn't possible on arch with official packages, without relying on AUR.

Miriway and Mir can both be built and installed just fine without needing to employ the snap container mechanism

I don't know jack about building packages for arch, but I can probably have a look later today

@stefonarch
Copy link
Member

I don't know jack about building packages for arch, but I can probably have a look later today

Building isn't difficult but having them accepted and meeting the standards required is probably not that easy.

https://repology.org/project/mir/versions
https://repology.org/project/miriway/versions

@sfalken
Copy link

sfalken commented Jan 16, 2025

Here's pre-compiled wlcs, mir, and miriway for you test against:

https://download.opensuse.org/repositories/home:/sfalken:/arch_miriway/Arch/x86_64/

The wlcs and mir PKGBUILDS were taken directly from the AUR, I bashed out the miriway one. If you want to use my PKGBUILD to get it into the AUR, that's fine by me. I don't normally package for Arch, and have more than enough on my plate, that I don't really feel like figuring out how to navigate the submission processes.

PKGBUILDS that were used to build these are here: https://build.opensuse.org/project/show/home:sfalken:arch_miriway

@stefonarch
Copy link
Member

stefonarch commented Jan 16, 2025

The issue I had was mir (well, setting up snapd wasn't what I liked, removed now) -it felt like compiling kwin or theseus heating my laptop too much.

$ yay -U miriway-24.11-1-x86_64.pkg.tar.zst 
loading packages...
resolving dependencies...
warning: cannot resolve "mir", a dependency of "miriway"
:: The following package cannot be upgraded due to unresolvable dependencies:
      miriway

I don't see a package for Mir...

@stefonarch
Copy link
Member

It is also packaged and available in Fedora Rawhide, and available for Fedora 41 in COPR.

Found by chance https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/aarch64/os/Packages/l/lxqt-wayland-session-0.1.1-4.fc42.noarch.rpm
but I don't see any configurations installed:

immagine

@sfalken
Copy link

sfalken commented Jan 16, 2025

It is also packaged and available in Fedora Rawhide, and available for Fedora 41 in COPR.

Found by chance https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/aarch64/os/Packages/l/lxqt-wayland-session-0.1.1-4.fc42.noarch.rpm but I don't see any configurations installed:

immagine

Correct. On Fedora it will be lxqt-miriway-session Fedora and openSUSE don't put everything into one big package like arch does.

This is an openSUSE Tumbleweed system, but if you run dnf search lxqt | grep session on Fedora, you will see similar results:

sfalken@localhost:~> sudo zypper se lxqt | grep session
   | lxqt-hyprland-session             | Session files for LXQt-Hyprland                                | package
   | lxqt-labwc-session                | Session files and theme for labwc                              | package
i+ | lxqt-miriway-session              | Session files for LXQt-Miriway                                 | package
   | lxqt-niri-session                 | Session files for LXQT-niri                                    | package
   | lxqt-river-session                | Session files for LXQt-river                                   | package
i  | lxqt-session                      | LXQt Session Manager                                           | package
i  | lxqt-session-branding-upstream    | Upstream branding of lxqt-session                              | package
i  | lxqt-session-lang                 | Translations for package lxqt-session                          | package
   | lxqt-sway-session                 | Session files for LXQt-Sway                                    | package
   | lxqt-wayfire-session              | Session files for LXQt-wayfire                                 | package
i  | lxqt-wayland-session              | Files needed for the LXQt Wayland Session                      | package
   | lxqt-wayland-session              | Files needed for the LXQt Wayland Session                      | srcpackage
sfalken@localhost:~>                                                                                                     

@sfalken
Copy link

sfalken commented Jan 16, 2025

The issue I had was mir (well, setting up snapd wasn't what I liked, removed now) -it felt like compiling kwin or theseus heating my laptop too much.

$ yay -U miriway-24.11-1-x86_64.pkg.tar.zst 
loading packages...
resolving dependencies...
warning: cannot resolve "mir", a dependency of "miriway"
:: The following package cannot be upgraded due to unresolvable dependencies:
      miriway

I don't see a package for Mir...

Ah, hold on one moment, I forgot to enable publishing for Mir in that repo.

It's there now, if you want to try again on Archlinux.

@stefonarch
Copy link
Member

It's there now, if you want to try again on Archlinux.

Thanks, will test.

I see, so Fedora will ship similar packages as OpenSuse does: one for every compositor.

@sfalken
Copy link

sfalken commented Jan 16, 2025

It's there now, if you want to try again on Archlinux.

Thanks, will test.

I see, so Fedora will ship similar packages as OpenSuse does: one for every compositor.

Aye. I don't know that it's packaging policy exactly, but it is customary to do it like this for lots of stuff. It's got it's upsides, and it's downsides.

@stefonarch
Copy link
Member

stefonarch commented Jan 16, 2025

Ok, saw miriway now in action, thanks! At a first glance:

  • taskbar isn't working, have to look at the PR
  • multimonitor support? Looks like screen is duplicated. Is there any documentation for configuration file around?
  • F12 shortcut isn't set
  • coredump with DND in pcmanfm-qt
[2025-01-16 18:30:08.446220] < -warning- > eglstream: Failed to create EGL context: no EGL_STREAM_BIT_KHR configs supported
[2025-01-16 18:30:08.629447] < -warning- > gbm-kms: Unable to determine the current display mode.
[2025-01-16 18:30:08.629539] < -warning- > gbm-kms: Unable to determine the current display mode.
[2025-01-16 18:30:08.646619] < -warning- > gbm-kms: Ignoring attempt to set zero length gamma
[2025-01-16 18:30:08.646672] < -warning- > gbm-kms: Ignoring attempt to set zero length gamma
[2025-01-16 18:30:08.811135] < -warning- > mirserver: Cannot find app info for app with name:QEMU
[2025-01-16 18:30:08.812806] < - ERROR - > mirserver: Unable to watch directory /var/lib/snapd/desktop/applications

** (com.github.sgpthomas.hourglass-daemon:457691): CRITICAL **: 18:30:09.108: HourglassServer.vala:61: Could not aquire service name
** Message: 18:30:09.109: Another instance of GeoClue DemoAgent is running.
isPrimaryInstance
New PolkitAgentListener  0x56c3aff63400
Adding new listener  PolkitQt1::Agent::Listener(0x7ffc8b860ff0) for  0x56c3aff63400
No user preferences available. Attempting auto-detection.

 ERROR: Could not create a backend for window managment operations.
 Falling back to dummy backend. Some functions will not be available.
 

Currently tray plugin supports X11 only. Skipping.
"Can't load plugin \"tray\". Plugin can't build ILXQtPanelPlugin."
StatusNotifierProxy, services: QList()
BatteryChanged discharging: false chargeLevel: 100 actionTime: QTime(Invalid)
Inhibit got: 40
Starting idlenesswatcher
kf.idletime: Could not find any system poller plugin
qt.core.qobject.connect: QObject::connect(KAbstractIdleTimePoller, KIdleTime): invalid nullptr parameter
qt.core.qobject.connect: QObject::connect(KAbstractIdleTimePoller, KIdleTime): invalid nullptr parameter
"PowerButton" "" ""
"SuspendButton" "" ""
"HibernateButton" "" ""
[2025-01-16 18:30:15.411408] < -warning- > gbm-kms: clear_cursor: drmModeSetCursor failed (Permission denied)
[2025-01-16 18:30:15.411456] < -warning- > gbm-kms: clear_cursor: drmModeSetCursor failed (Permission denied)

@sfalken
Copy link

sfalken commented Jan 16, 2025

Let me get arch spun up in a vm and see if I can figure out any of this.

@Conan-Kudo
Copy link
Author

Some of this might be the lxqt-panel using the dummy backend instead of the wayland/wlroots backend?

@tsujan
Copy link
Member

tsujan commented Jan 16, 2025

On the contrary, a dummy backend can hide probable problems of the compositor.

@stefonarch
Copy link
Member

The taskbar is working fine when killing the panel and restarting it with

echo XDG_CURRENT_DESKTOP=wlroots 
lxqt-panel

wlroots here means the wlroots-compatible backend to load. It's not perfect, and it isn't "true" also for Hyprland and Niri.

DND compositor crash on the Desktop, from any pcmanfm-qt window or text in featherpad is not related to the backend for the panel. Compositor crashing is really bad as it takes anything with it.

Miriway is a new generic compositor built on the Mir compositor
library that is designed to be used as part of composable desktop
environments.
@sfalken
Copy link

sfalken commented Jan 17, 2025

lxqt-panel with the patches applied from lxqt/lxqt-panel#2161
lxqt-session with the patches applied from lxqt/lxqt-session#571
lxqt-wayland-session with the patches applied from #40

are now packaged for archlinux @ https://download.opensuse.org/repositories/home:/sfalken:/arch_miriway/Arch/x86_64/

The F12 key for qterminal --drop still doesn't work, I'm talking with the miriway upstream about that (it doesn't work on Tumbleweed or Fedora either)

Multimonitor would need to be figured out in ~/.config/lxqt/miriway-shell.config as it's just a text file like most of the other available wayland compositors at present.

DND in PCManFM-Qt does indeed crash the shell on arch I haven't a clue why, it works fine on both Fedora and openSUSE with the same patches.

Miriway is still young, and what configuration instructions exist, live here: https://github.com/Miriway/Miriway/blob/main/CONFIGURING_MIRIWAY.md

@stefonarch
Copy link
Member

stefonarch commented Jan 17, 2025

Another issue that I see here is with a bottom panel menu all popups align to screen border:

immagine

Probably we could add support for it in the panel and session, but I think at this stage it isn't mature enough to be included here, also because we can't test it reliably on arch. An external repo for lxqt-miriway-session is the best way IMO atm.

Was anybody using it heavily on a daily base?

@stefonarch
Copy link
Member

FYI, the log from WAYLAND_DEBUG=1 startlxqtwayland 2>/tmp/log, pressed left mouse button on a folder and at the first attempt of dragging:

[ 796721.306] wl_data_source#62.offer("application/x-qabstractitemmodeldatalist")
[ 796721.312] wl_data_source#62.offer("text/uri-list")
[ 796721.318] wl_data_source#62.offer("libfm/files")
[ 796721.323] wl_data_source#62.set_actions(3)
[ 796721.329] wl_data_device#8.start_drag(wl_data_source#62, wl_surface#34, wl_surface#72, 44)
[ 796721.351]  -> wl_pointer#24.leave(45, wl_surface#34)
/usr/include/c++/14.2.1/optional:475: constexpr _Tp& std::_Optional_base_impl<_Tp, _Dp>::_M_get() [with _Tp = mir::geometry::generic::Size<int>; _Dp = std::_Optional_base<mir::geometry::generic::Size<int>, false, false>]: Assertion 'this->_M_is_engaged()' failed.
!!! Fatal signal received. Attempting cleanup, but deadlock may occur
Mir fatal error: Unsupported attempt to continue after a fatal signal: SIGABRT
[ 796724.594]  -> wl_surface#34.frame(new id wl_callback#77)
[ 796724.640] {Default Queue}  -> wl_surface#34.attach(wl_buffer#47, 0, 0)
[ 796724.652] {Default Queue}  -> wl_surface#34.damage_buffer(12, 434, 127, 126)
[ 796724.660] {Default Queue}  -> wl_surface#34.commit()
[ 796724.790] {Default Queue}  -> wl_shm#17.create_pool(new id wl_shm_pool#78, fd 36, 64008)
[ 796724.805] {Default Queue}  -> wl_shm_pool#78.create_buffer(new id wl_buffer#79, 0, 127, 126, 508, 0)
[ 796724.936]  -> wl_surface#72.frame(new id wl_callback#80)
[ 796724.953] {Default Queue}  -> wl_surface#72.attach(wl_buffer#79, -82, -27)
[ 796724.962] {Default Queue}  -> wl_surface#72.damage_buffer(0, 0, 127, 126)
[ 796724.970] {Default Queue}  -> wl_surface#72.commit()
[ 796732.879] {Default Queue}  -> wl_surface#34.attach(wl_buffer#58, 0, 0)
[ 796732.906] {Default Queue}  -> wl_surface#34.damage_buffer(0, 0, 1920, 1080)
[ 796732.911] {Default Queue}  -> wl_surface#34.commit()
The Wayland connection broke. Did the Wayland compositor die?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants