The foundation for many embedded graphical display implementations

Overview

Ubuntu Frame

Description

The foundation for many embedded graphical display implementations. ubuntu-frame is a simple fullscreen shell (based on Wayland) used for kiosks, industrial displays, digital signage, smart mirrors, etc.

The application you choose (or provide) gets a fullscreen window (or windows) and input from touch, keyboard and mouse without needing to deal with the specific hardware.

Configuration

There are three snap configuration options:

  • daemon=[true|false] enables the daemon (defaults to false on classic systems)
  • config=<options for the shell>
  • display=<options for display layout>

The configuration options are described in detail in REFERENCE.md

Development

Developers working with Ubuntu Frame may find the following useful:


ubuntu-frame

Comments
  • Add libfeedback and squeekboard parts

    Add libfeedback and squeekboard parts

    I haven't tested installing/running this yet because I'm having problems with snapd system-wide on Arch and didn't fire up Ubuntu yet. It builds on my machine.

    opened by wmww 20
  • Flutter app can't create a GL context on RPi 4/Ubuntu Core 20

    Flutter app can't create a GL context on RPi 4/Ubuntu Core 20

    Hi, we are in the process to port our flutter app to Ubuntu Core with Ubuntu Frame. But we sadly see an error when we try to start our app and the screen stays white. What prevents us from shipping our devices with Ubuntu Core.

    These are the logs that we see:

    2021-11-26T11:57:34Z trunk-pilot-dashboard.daemon[1071]: + snapctl get daemon
    2021-11-26T11:57:34Z trunk-pilot-dashboard.daemon[773]: + [ true = true ]
    2021-11-26T11:57:34Z trunk-pilot-dashboard.daemon[773]: + exec /snap/trunk-pilot-dashboard/x1/bin/wayland-launch /snap/trunk-pilot-dashboard/x1/bin/trunk_pilot_dashboard
    2021-11-26T11:57:35Z trunk-pilot-dashboard.daemon[1083]: error: error running snapctl: snap "trunk-pilot-dashboard" has no plug or slot named "pulseaudio"
    2021-11-26T11:57:35Z trunk-pilot-dashboard.daemon[773]: WARNING: pulseaudio interface not connected! Please run: /snap/trunk-pilot-dashboard/current/bin/setup.sh
    2021-11-26T11:57:35Z trunk-pilot-dashboard.daemon[1098]: Setting up watches.
    2021-11-26T11:57:35Z trunk-pilot-dashboard.daemon[1098]: Watches established.
    2022-01-03T10:03:44Z trunk-pilot-dashboard.daemon[1098]: /run/user/0/ CREATE wayland-0.lock
    2022-01-03T10:03:45Z -[773]: g_dbus_proxy_new_sync: assertion 'G_IS_DBUS_CONNECTION (connection)' failed
    2022-01-03T10:03:49Z -[773]: Failed to start Flutter renderer: Unable to create a GL context
    

    We followed the "RUNNING_ON_YOUR_DEVICE" documentation to set up Ubuntu Frame and "Run Flutter Applications on Ubuntu Core" to configure our flutter app.

    Here is also our snap config:

    name: trunk-andon
    version: 1.0.3
    summary: Trunk Andon App
    description: Trunk Andon app to visualize pilot data.
    
    confinement: strict
    base: core18
    grade: stable
    
    apps:
      daemon:
        daemon: simple
        restart-condition: always
        command-chain:
          - bin/run-daemon
          - bin/wayland-launch
        command: bin/trunk-andon
        extensions: [flutter-master]
    
      trunk-andon:
        command-chain:
          - bin/wayland-launch
        command: trunk-andon
        extensions: [flutter-master]
    
    parts:
      trunk-andon:
        source: .
        plugin: flutter
        flutter-target: lib/main.dart
    
      mir-kiosk-snap-launch:
        plugin: dump
        source: https://github.com/MirServer/mir-kiosk-snap-launch.git
        override-build: $SNAPCRAFT_PART_BUILD/build-with-plugs.sh opengl pulseaudio wayland
        stage-packages:
          - inotify-tools
    
      assets:
        plugin: nil
        stage-packages:
          - dmz-cursor-theme
          - fonts-dejavu
          - fonts-freefont-ttf
          - fonts-ubuntu
    
    layout:
      /usr/share/fonts:
        bind: $SNAP/usr/share/fonts
      /etc/fonts:
        bind: $SNAP/etc/fonts
      /usr/share/icons:
        bind: $SNAP/usr/share/icons
    

    Did we configure something wrong or do we need to connect the app with wayland manually to make it work? Thank you!

    opened by KirioXX 15
  • ubuntu-frame fails to install in Jetson nano

    ubuntu-frame fails to install in Jetson nano

    Hi,

    I have been trying to install ubuntu-frame in Jeston and from past week I have been trying many ways but I'm not able to install it in Jetson.

    OS: Ubuntu 18.04.6 LTS (GNU/Linux 4.9.253-tegra aarch64)

    Snap version: $ snap version snap 2.57.1 snapd 2.57.1 series 16 ubuntu 18.04 kernel 4.9.253-tegra

    Error: $ sudo snap install ubuntu-frame error: cannot perform the following tasks: - Mount snap "ubuntu-frame" (3901) (systemctl command [start snap-ubuntu\x2dframe-3901.mount] failed with exit status 1: Job for snap-ubuntu\x2dframe-3901.mount failed. See "systemctl status "snap-ubuntu\\x2dframe-3901.mount"" and "journalctl -xe" for details. ) - Mount snap "mesa-core20" (126) (systemctl command [start snap-mesa\x2dcore20-126.mount] failed with exit status 1: Job for snap-mesa\x2dcore20-126.mount failed. See "systemctl status "snap-mesa\\x2dcore20-126.mount"" and "journalctl -xe" for details. )

    opened by Eldho1416 10
  • [Merged by Bors] - Add crash reporter

    [Merged by Bors] - Add crash reporter

    Combines the wallpaper into a CrashReporter which, when a log file is created at a certain location, displays the log file on screen.

    Creating as draft because I haven't yet looked into where Snapcraft puts logs by default.

    opened by graysonguarino 10
  • [Merged by Bors] - Add screenshot command

    [Merged by Bors] - Add screenshot command

    Draft because it requires unreleased Mir from the dev PPA.

    Used grim (wayshot isn't in the Ubuntu repos, and doesn't seem better in any way relevant to us). Connects to the home plug and saves by default in the current directory.

    opened by wmww 10
  • If aa_getpeercon() fails then ubuntu-frame-* client snaps don't work with default configuration

    If aa_getpeercon() fails then ubuntu-frame-* client snaps don't work with default configuration

    On some systems (e.g. Archlinux minimal console only installation 5.18.12-arch1-1) this call fails and a workaround is required to enable the extensions needed by, for example, ubuntu-frame-osk.


    Original report:

    Hi,

    I have tried to get ubuntu-frame-osk to work unsuccessfully by following https://discourse.ubuntu.com/t/ubuntu-frame-osk-documentation/27568.

    The service was crashing with No virtual keyboard manager Wayland global available on release and edge versions.

    I was only able to get it working when I found this issue https://github.com/MirServer/mir/issues/2063 which resonates with the problem.

    By simply adding the config below ubuntu-frame-osk works fine on edge.

    snap set ubuntu-frame config "
    add-wayland-extensions=zwlr_layer_shell_v1:zwp_virtual_keyboard_manager_v1:zwp_text_input_manager_v3:zwp_input_method_manager_v2
    "
    

    ubuntu-frame 71-mir2.8.0+dev398 ubuntu-frame-osk 40-squeekboard-v1.17.1 wpe-webkit-mir-kiosk 2.30.5

    enhancement 
    opened by m2scared 6
  • How to EXIT the locked screen?

    How to EXIT the locked screen?

    Sorry, it might be a silly question, but I didn't find any info about this. So I installed Ubuntu 22 Desktop (minimal config) and I successfully installed ubuntu-frame and mir server. When I ran "snap set ubuntu-frame daemon=true" the screen locked and I have no idea how to get out of it. I restarted it and, as it should do, it comes back to the locked screen, but I didn;t even get to change the URL or anything else, it's just the grey screen. Usually, the kiosk locking apps have a key combination or a touch sequence to show an admin password. How does ubuntu-frame work in that respect? Thank you so much!

    documentation 
    opened by SomeDevWeb 6
  • Compatibility issues with Intel i915

    Compatibility issues with Intel i915

    Having issues enabling Frame and wondering where in the software stack the issue lies. When switching to daemon=true the screen switches to console mode with the following msg:

    [ 132.546752 ] i915 [drm] *ERROR* failed to enable link training

    Our hardware is Intel i3 with Intel UHD Graphics 620 running Ubuntu 21.10 desktop version.

    I'm guessing this is a video driver issue, but would like to know where to start looking for a fix.

    opened by mtinnes 6
  • [RPi3/Ubuntu Server 21.10] Fails to start Web Kiosk example

    [RPi3/Ubuntu Server 21.10] Fails to start Web Kiosk example

    I've followed the steps described here to set up a raspberry pi with Ubuntu Server 21.10 to show a web page with no success.

    Steps:

    1. Flash the Ubuntu Server 21.10 on an sdcard and insert into the Raspberry Pi
    2. Connected the Raspberry Pi to an HDMI external monitor
    3. Follow the instructions via an SSH connection. After running snap set ubuntu-frame daemon=true command the external monitor turns black and the cursor starts blinking on the top left of the screen. Even after entering the remaining commands the screen remains the same without showing a web page.

    Thank you in advance.

    opened by flaprimo 6
  • [Merged by Bors] - Improve logic for overriding window state

    [Merged by Bors] - Improve logic for overriding window state

    This was going wrong in several scenarios:

    1. Maximized windows were not getting fullscreened
    2. Fullscreening a window (F11 in gedit) led to it being offset from the screen corner
    opened by AlanGriffiths 6
  • Crash in `xkb_context_ref` on first client connection under X11

    Crash in `xkb_context_ref` on first client connection under X11

    Steps:

    • snap remove --purge ubuntu-frame
    • snap install ubuntu-frame --edge
    • ubuntu-frame
    • In another terminal: sudo gdb -p $( pidof frame )
    • In yet another: snap install wpe-webkit-mir-kiosk
    • snap connect wpe-webkit-mir-kiosk:wayland ubuntu-frame
    • wpe-webkit-mir-kiosk.cog
    • 💥
    Thread 5 "Mir/Wayland" received signal SIGSEGV, Segmentation fault.                                                                                                                                                               
    [Switching to LWP 1662713]                                                                                       
    0x00007f74d5fd1e24 in xkb_context_ref () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libxkbcommon.so.0
    
    Thread 5 (LWP 1662713 "Mir/Wayland"):
    #0  0x00007f74d5fd1e24 in xkb_context_ref () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libxkbcommon.so.0
    #1  0x00007f74d5fd3fdc in ?? () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libxkbcommon.so.0
    #2  0x00007f74d5fd37dd in xkb_keymap_new_from_names () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libxkbcommon.so.0
    #3  0x00007f74d68b55fa in mir::input::ParameterKeymap::make_unique_xkb_keymap(xkb_context*) const () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libmircommon.so.8
    #4  0x00007f74d6a33a07 in ?? () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libmirserver.so.56
    #5  0x00007f74d6a33dbc in ?? () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libmirserver.so.56
    #6  0x00007f74d6a33ea4 in ?? () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libmirserver.so.56
    #7  0x00007f74d61278c0 in mir::wayland::Seat::Thunks::get_keyboard_thunk(wl_client*, wl_resource*, unsigned int) () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libmirwayland.so.3
    #8  0x00007f74d648dff5 in ?? () from target:/lib/x86_64-linux-gnu/libffi.so.7
    #9  0x00007f74d648d40a in ?? () from target:/lib/x86_64-linux-gnu/libffi.so.7
    #10 0x00007f74d5fad628 in ?? () from target:/snap/ubuntu-frame/490/graphics/lib/libwayland-server.so.0
    #11 0x00007f74d5fa99e2 in ?? () from target:/snap/ubuntu-frame/490/graphics/lib/libwayland-server.so.0
    #12 0x00007f74d5fab65a in wl_event_loop_dispatch () from target:/snap/ubuntu-frame/490/graphics/lib/libwayland-server.so.0
    #13 0x00007f74d5fa9bd5 in wl_display_run () from target:/snap/ubuntu-frame/490/graphics/lib/libwayland-server.so.0
    #14 0x00007f74d6a4264d in ?? () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libmirserver.so.56
    #15 0x00007f74d6e60de4 in ?? () from target:/lib/x86_64-linux-gnu/libstdc++.so.6
    #16 0x00007f74d649c609 in start_thread () from target:/lib/x86_64-linux-gnu/libpthread.so.0
    #17 0x00007f74d6c9d293 in clone () from target:/lib/x86_64-linux-gnu/libc.so.6
    
    Full gdb dump
      Id   Target Id                     Frame 
      1    LWP 1662678 "frame"           0x00007f74d6c90aff in poll () from target:/lib/x86_64-linux-gnu/libc.so.6
      2    LWP 1662710 "frame"           0x00007f74d64a3376 in [email protected]@GLIBC_2.3.2 () from target:/lib/x86_64-linux-gnu/libpthread.so.0
      3    LWP 1662711 "Mir/Comp"        0x00007f74d64a3376 in [email protected]@GLIBC_2.3.2 () from target:/lib/x86_64-linux-gnu/libpthread.so.0
      4    LWP 1662712 "Mir/Input Reade" 0x00007f74d6c90aff in poll () from target:/lib/x86_64-linux-gnu/libc.so.6
    * 5    LWP 1662713 "Mir/Wayland"     0x00007f74d5fd1e24 in xkb_context_ref () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libxkbcommon.so.0
      6    LWP 1662714 "frame"           0x00007f74d6c90aff in poll () from target:/lib/x86_64-linux-gnu/libc.so.6
    

    Thread 6 (LWP 1662714 "frame"): #0 0x00007f74d6c90aff in poll () from target:/lib/x86_64-linux-gnu/libc.so.6 #1 0x000055b53da9776d in egmde::FullscreenClient::run(wl_display*) () #2 0x000055b53da939d2 in egmde::Wallpaper::operator()(wl_display*) () #3 0x000055b53da90ab0 in void std::__invoke_impl<void, egmde::Wallpaper&, wl_display*>(std::__invoke_other, egmde::Wallpaper&, wl_display*&&) () #4 0x000055b53da90822 in std::__invoke_result<egmde::Wallpaper&, wl_display*>::type std::__invoke<egmde::Wallpaper&, wl_display*>(egmde::Wallpaper&, wl_display*&&) () #5 0x000055b53da900f9 in std::result_of<egmde::Wallpaper& (wl_display*&&)>::type std::reference_wrapperegmde::Wallpaper::operator()<wl_display*>(wl_display*&&) const () #6 0x000055b53da8f0b8 in std::_Function_handler<void (wl_display*), std::reference_wrapperegmde::Wallpaper >::_M_invoke(std::_Any_data const&, wl_display*&&) () #7 0x00007f74d6ffc34a in ?? () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libmiral.so.4 #8 0x00007f74d6e60de4 in ?? () from target:/lib/x86_64-linux-gnu/libstdc++.so.6 #9 0x00007f74d649c609 in start_thread () from target:/lib/x86_64-linux-gnu/libpthread.so.0 #10 0x00007f74d6c9d293 in clone () from target:/lib/x86_64-linux-gnu/libc.so.6

    Thread 5 (LWP 1662713 "Mir/Wayland"): #0 0x00007f74d5fd1e24 in xkb_context_ref () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libxkbcommon.so.0 #1 0x00007f74d5fd3fdc in ?? () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libxkbcommon.so.0 #2 0x00007f74d5fd37dd in xkb_keymap_new_from_names () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libxkbcommon.so.0 #3 0x00007f74d68b55fa in mir::input::ParameterKeymap::make_unique_xkb_keymap(xkb_context*) const () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libmircommon.so.8 #4 0x00007f74d6a33a07 in ?? () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libmirserver.so.56 #5 0x00007f74d6a33dbc in ?? () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libmirserver.so.56 #6 0x00007f74d6a33ea4 in ?? () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libmirserver.so.56 #7 0x00007f74d61278c0 in mir::wayland::Seat::Thunks::get_keyboard_thunk(wl_client*, wl_resource*, unsigned int) () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libmirwayland.so.3 #8 0x00007f74d648dff5 in ?? () from target:/lib/x86_64-linux-gnu/libffi.so.7 #9 0x00007f74d648d40a in ?? () from target:/lib/x86_64-linux-gnu/libffi.so.7 #10 0x00007f74d5fad628 in ?? () from target:/snap/ubuntu-frame/490/graphics/lib/libwayland-server.so.0 #11 0x00007f74d5fa99e2 in ?? () from target:/snap/ubuntu-frame/490/graphics/lib/libwayland-server.so.0 #12 0x00007f74d5fab65a in wl_event_loop_dispatch () from target:/snap/ubuntu-frame/490/graphics/lib/libwayland-server.so.0 #13 0x00007f74d5fa9bd5 in wl_display_run () from target:/snap/ubuntu-frame/490/graphics/lib/libwayland-server.so.0 #14 0x00007f74d6a4264d in ?? () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libmirserver.so.56 #15 0x00007f74d6e60de4 in ?? () from target:/lib/x86_64-linux-gnu/libstdc++.so.6 #16 0x00007f74d649c609 in start_thread () from target:/lib/x86_64-linux-gnu/libpthread.so.0 #17 0x00007f74d6c9d293 in clone () from target:/lib/x86_64-linux-gnu/libc.so.6

    Thread 4 (LWP 1662712 "Mir/Input Reade"): #0 0x00007f74d6c90aff in poll () from target:/lib/x86_64-linux-gnu/libc.so.6 #1 0x00007f74d68ad5b6 in ?? () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libmircommon.so.8 #2 0x00007f74d68a4413 in ?? () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libmircommon.so.8 #3 0x00007f74d6e60de4 in ?? () from target:/lib/x86_64-linux-gnu/libstdc++.so.6 #4 0x00007f74d649c609 in start_thread () from target:/lib/x86_64-linux-gnu/libpthread.so.0 #5 0x00007f74d6c9d293 in clone () from target:/lib/x86_64-linux-gnu/libc.so.6

    Thread 3 (LWP 1662711 "Mir/Comp"): #0 0x00007f74d64a3376 in [email protected]@GLIBC_2.3.2 () from target:/lib/x86_64-linux-gnu/libpthread.so.0 #1 0x00007f74d6e5ae30 in std::condition_variable::wait(std::unique_lockstd::mutex&) () from target:/lib/x86_64-linux-gnu/libstdc++.so.6 #2 0x00007f74d6a67d3b in ?? () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libmirserver.so.56 #3 0x00007f74d69d3e92 in ?? () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libmirserver.so.56 #4 0x00007f74d6e60de4 in ?? () from target:/lib/x86_64-linux-gnu/libstdc++.so.6 #5 0x00007f74d649c609 in start_thread () from target:/lib/x86_64-linux-gnu/libpthread.so.0 #6 0x00007f74d6c9d293 in clone () from target:/lib/x86_64-linux-gnu/libc.so.6

    Thread 2 (LWP 1662710 "frame"): #0 0x00007f74d64a3376 in [email protected]@GLIBC_2.3.2 () from target:/lib/x86_64-linux-gnu/libpthread.so.0 #1 0x00007f74d6e5ae30 in std::condition_variable::wait(std::unique_lockstd::mutex&) () from target:/lib/x86_64-linux-gnu/libstdc++.so.6 #2 0x00007f74d570fb01 in ?? () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/mir/server-platform/graphics-gbm-kms.so.19 #3 0x00007f74d6e60de4 in ?? () from target:/lib/x86_64-linux-gnu/libstdc++.so.6 #4 0x00007f74d649c609 in start_thread () from target:/lib/x86_64-linux-gnu/libpthread.so.0 #5 0x00007f74d6c9d293 in clone () from target:/lib/x86_64-linux-gnu/libc.so.6

    Thread 1 (LWP 1662678 "frame"): #0 0x00007f74d6c90aff in poll () from target:/lib/x86_64-linux-gnu/libc.so.6 #1 0x00007f74d67a636e in ?? () from target:/lib/x86_64-linux-gnu/libglib-2.0.so.0 #2 0x00007f74d67a64a3 in g_main_context_iteration () from target:/lib/x86_64-linux-gnu/libglib-2.0.so.0 #3 0x00007f74d6acdee9 in ?? () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libmirserver.so.56 #4 0x00007f74d6ad5395 in mir::run_mir(mir::ServerConfiguration&, std::function<void (mir::DisplayServer&)>, std::function<void (int)> const&) () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libmirserver.so.56 #5 0x00007f74d6ac063a in mir::Server::run() () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libmirserver.so.56 #6 0x00007f74d7009064 in miral::MirRunner::run_with(std::initializer_list<std::function<void (mir::Server&)> >) () from target:/snap/ubuntu-frame/490/usr/lib/x86_64-linux-gnu/libmiral.so.4 #7 0x000055b53da8c760 in main ()

    bug 
    opened by Saviq 5
  • Multi-Display Support

    Multi-Display Support

    Is there an easy way to support Multi-display support on a single Hardware Client. For example, an HPE t740 Thin Client. It has 4 independent Display Port Outputs, and enough horsepower to visualize the Web Instances we would like to target.

    The goal is 4 completely different web targets, executed together, across 4 screens.

    opened by allebone 5
  • Add automated testing to Frame

    Add automated testing to Frame

    As new features are being added to Frame, it may be helpful to add automated testing to the codebase for new features. GTest is already utilized in Mir, and while there isn't much worth unit testing in Frame, it may prove useful if it continues to expand.

    Integration testing to ensure compatibility between Frame and various snaps would be even more useful, though I am unaware of a framework which is best in this case.

    opened by graysonguarino 0
  • If the containing directory of `diagnostic-path` is deleted and recreated content is not displayed

    If the containing directory of `diagnostic-path` is deleted and recreated content is not displayed

    Not urgent, as this isn't a usecase we need, but...

    $ mkdir existing
    $ cmake-build-debug/frame --diagnostic-path existing/tmp&
    $ echo plover > existing/tmp
    [displays "plover"]
    $ rm -rf existing/
    [displays greyscale]
    $ mkdir existing
    $ echo plover > existing/tmp
    [displays greyscale]
    
    opened by AlanGriffiths 0
  • Migrate from boost::filesystem to std::filesystem

    Migrate from boost::filesystem to std::filesystem

    C++17 introduced std::filesystem, so it would be better to use that than Boost

    But the default Ubuntu 20.04 standard library only has std::experimental::filesystem which is subtly different. So it may be worth deferring the migration until we move to base: core22

    opened by AlanGriffiths 1
  • Throw mir::AbnormalExit if bad configuration options given

    Throw mir::AbnormalExit if bad configuration options given

        Probably an issue elsewhere in Frame (so non-blocking), but throwing `mir::AbnormalExit` likely gives better output.
    

    Originally posted by @AlanGriffiths in https://github.com/MirServer/ubuntu-frame/pull/97#discussion_r1006081753

    All bad configuration option checks currently throw a Boost std::runtime_error exception, where mir::AbnormalExit is preferred.

    opened by graysonguarino 0
Owner
null
Display array is a board that sets 6 ST7735 display with a resolution of 80x160px in a linear array sharing the clock, data, rs, backlight pins together

The display array is a board that sets 6 ST7735 display with a resolution of 80x160px in a linear array sharing the clock, data, rs, backlight pins together, and leaving individual access to the cs lines of each display, This board allows you to display images with a resolution of 480x160px.

Josue Alejandro Gutierrez 70 Dec 19, 2022
A place to collaborate on code for the Embedded.fm book club. Currently reading "STM32 ARM Programming for Embedded Systems".

Welcome to the Book Club Code site! This is a place for the Embedded.fm book club to collaborate and learn together. Repo Structure Guide Top-level fo

Peter Griffin 11 Jul 21, 2022
Embedded Flutter runtime targeting Embedded Linux with Wayland

ivi-homescreen IVI Homescreen for Wayland Strongly Typed (C++) Lightweight Clang 11 Release Stripped = 151k GCC 9.3 Release Stripped = 168k Source run

null 170 Dec 13, 2022
A collection of different Cellular Automata implementations for recreational purposes

A collection of different Cellular Automata implementations for recreational purposes

Tsoding 19 Oct 4, 2022
Comparing the performance of Wave Digital Filter implementations

WDF Bakeoff Comparing performance between Wave Digital Filters implemented in C++ and Faust. Building First clone the repository and submodules: git c

null 12 Dec 4, 2022
Celeborn is a Userland API Unhooker that I developed for learning Windows APIs and Syscall implementations

Celeborn is a Userland API Unhooker that I developed for learning Windows APIs and Syscall implementations. It mainly detects and patches hooking instructions in NTDLL.dll file. All PRs are welcome!

Furkan Göksel 101 Nov 11, 2022
Competitive Programming Implementations, Resources, Solutions, and Tools

In competitive programming contests, one must write computer programs capable of solving clear-cut problems under the given contraints and limits. Most competitive programmers use C++, Java, or Python.

Dong Liu 14 Sep 23, 2021
Reference Implementations of P0267, the proposed 2D graphics API for ISO C++

P0267 Reference Implementation Please read the LICENSE before cloning or forking the code as there is important information there! Please see the wiki

cpp-io2d 306 Dec 3, 2022
Baseline implementations for common algorithms in C++

Algo Baselines Baseline implementations for common algorithms in C++. The code in this repo will probably not be generic enough that you can use it fo

null 3 Nov 23, 2022
the implementations of 'A Flexible New Technique for Camera Calibration' and Bouguet's method

StereoCameraCalibration MonocularCameraCalibration/StereoCameraCalibration/StereoCameraRectification 1、Class "MonocularCameraCalibration" provides the

gtc1072 8 Nov 3, 2022
A repository containing our learnings and implementations for the project "Anchor: The Docker Clone" under IEEE-NITK

Anchor: The Docker Clone A repository containing our learnings and implementations for the project "Anchor: The Docker Clone" under IEEE-NITK Currentl

Rakshita Varadarajan 1 Feb 7, 2022
A graphical interface to set options on devices with coreboot firmware

Corevantage A graphical interface to set options on devices with coreboot firmware. Introduction This is a utility that allows users to view and modif

null 31 Dec 20, 2022
SerenityOS - Graphical Unix-like operating system for x86 computers. 🐞

SerenityOS is a love letter to '90s user interfaces with a custom Unix-like core. It flatters with sincerity by stealing beautiful ideas from various other systems.

SerenityOS 23.5k Jan 4, 2023
Rule Engine (RE) creates an interpretable anomaly classifier from many one-feature and two-feature decision rules

Rule Engine (RE) creates an interpretable anomaly classifier from many one-feature and two-feature decision rules

James Thomas 15 Aug 15, 2022
A collection of scripts written in many different programming languages and each developed independently to perform very specific tasks (big or small)

Script Collection A collection of scripts written in many different programming languages and each developed independently to perform very specific ta

Giovanni Rebouças 5 Aug 31, 2021
Allows you to easily control via MQTT any Micronova equiped pellet stove. (MCZ, Extraflame, Laminox, and many others brands!)

micronova_controller Kits are available on Tindie! Currently out of stock. V2 will be in stock soon! Here is an overview of the additions: possibility

Philibert Cheminot 37 Dec 19, 2022
A python package to provide you with many useful tools for osu! servers, written in C++ for the best speeds possible.

pysu_bindings A python package to provide you with many useful tools for osu! servers, written in C++ for the best speeds possible. What? As most peop

James 2 Nov 29, 2021
A One Stop Place to find many useful Snippets for competitive programming

CP_Snippets A One Stop Place to find many useful Snippets for competetive programming Contribution Procedure Raise an issue about the snippet you want

Rasesh Shetty 5 Dec 6, 2021