[00:00.000 --> 00:07.000] It's 10.30 on the spot. [00:07.000 --> 00:10.000] So this is the start of the first call. [00:10.000 --> 00:11.000] Perfect. [00:11.000 --> 00:15.000] Thank you. [00:15.000 --> 00:17.000] Thank you, everyone. [00:17.000 --> 00:19.000] All right, so just to give a little introduction, [00:19.000 --> 00:21.000] I need to mute myself real quick. [00:21.000 --> 00:24.000] Just to give a little introduction about myself, [00:24.000 --> 00:26.000] my name is Alfred Neumeyer. [00:26.000 --> 00:29.000] I've been involved with the UBeport's project [00:29.000 --> 00:33.000] on Ubuntu Touch for about four, close to five years now. [00:33.000 --> 00:40.000] And I have started out with porting devices over to, [00:40.000 --> 00:44.000] Ubuntu Touch over to devices that used to run Android kernels [00:44.000 --> 00:46.000] and Android drivers, not mainline. [00:46.000 --> 00:50.000] I used and reused the high bits that we made up. [00:50.000 --> 00:55.000] And for that matter, I gained a lot of experience [00:55.000 --> 01:00.000] with the desktop later on because I started out with the phone [01:00.000 --> 01:03.000] and I really wanted to have this tablet experience [01:03.000 --> 01:05.000] with a touchpad and a keyboard. [01:05.000 --> 01:08.000] I couldn't get it quite right until some later hardware [01:08.000 --> 01:10.000] offered the ability to do so. [01:10.000 --> 01:13.000] But in the meantime, I was very interested in the desktop talk [01:13.000 --> 01:19.000] and what can we accomplish with the desktop convergence [01:19.000 --> 01:21.000] as the keyword. [01:21.000 --> 01:24.000] And I'm going to mention that one real quick. [01:24.000 --> 01:26.000] Let's see if the convergence thing actually [01:26.000 --> 01:30.000] does what it's supposed to do, right? [01:30.000 --> 01:32.000] Okay, black screen. [01:32.000 --> 01:37.000] Does it stay black? [01:37.000 --> 01:41.000] There you go. [01:41.000 --> 01:44.000] Okay, fingerprint reader doesn't want to work, [01:44.000 --> 01:47.000] but this one does. [01:47.000 --> 01:51.000] So, yeah, you can actually, with Limeria at least, [01:51.000 --> 01:54.000] you can use the phone as the virtual touchpad [01:54.000 --> 01:58.000] and virtual keyboard just to give it a little bit more [01:58.000 --> 02:01.000] presentation feel. [02:01.000 --> 02:04.000] We need to, where's the full screen? [02:04.000 --> 02:05.000] Is there a full screen? [02:05.000 --> 02:08.000] Do we have full screen? [02:08.000 --> 02:11.000] Otherwise, that one is sufficient, I hope, right? [02:11.000 --> 02:15.000] Now it's very obvious where it's running. [02:15.000 --> 02:17.000] Sorry, broke it to you. [02:17.000 --> 02:19.000] So, the Limeria on the desktop, [02:19.000 --> 02:22.000] less of the pocket-sized desktop. [02:22.000 --> 02:25.000] As we can see, it is totally possible to do so, [02:25.000 --> 02:28.000] considering that we're still at the starting phase [02:28.000 --> 02:30.000] of where this really can go. [02:30.000 --> 02:32.000] So, I'm going to talk about a little bit of the history [02:32.000 --> 02:35.000] then about the evil convergence word, [02:35.000 --> 02:38.000] the word that we all like to use, [02:38.000 --> 02:40.000] but so many people are using so many different senses, [02:40.000 --> 02:42.000] so many different ways, [02:42.000 --> 02:46.000] then how we migrate it over a few technology pieces [02:46.000 --> 02:50.000] like the system layer and the windowing protocol, [02:50.000 --> 02:52.000] the UI toolkit I'm going to introduce to you [02:52.000 --> 02:55.000] and notable components that should you be interested [02:55.000 --> 02:58.000] in either working with us or taking our stuff [02:58.000 --> 03:01.000] and working on your own stuff, [03:01.000 --> 03:03.000] bring it over to another distro, [03:03.000 --> 03:05.000] you're totally free to do so, [03:05.000 --> 03:06.000] and I will mention a few components [03:06.000 --> 03:08.000] that you might be interested in. [03:08.000 --> 03:09.000] So, what do we have? [03:09.000 --> 03:11.000] The history. [03:11.000 --> 03:14.000] 2013, the year of Ubuntu Phone. [03:14.000 --> 03:17.000] As we hoped, as some of us hoped, [03:17.000 --> 03:21.000] as it did not drop until it really dropped, [03:21.000 --> 03:24.000] and that was until 2016. [03:24.000 --> 03:27.000] In 2013, they introduced the Lumiri Shell, [03:27.000 --> 03:29.000] what's now called Lumiri, [03:29.000 --> 03:31.000] they called it Unity 8 back then [03:31.000 --> 03:33.000] as a continuation of their desktop efforts, [03:33.000 --> 03:36.000] and they introduced MIR, the MIR server library [03:36.000 --> 03:40.000] that allows developers of compositors [03:40.000 --> 03:43.000] to easily create a new, [03:43.000 --> 03:45.000] these Weyland-based compositor, [03:45.000 --> 03:47.000] back then they used their own protocol, [03:47.000 --> 03:49.000] which caused a lot of problems [03:49.000 --> 03:51.000] for some people in the community, [03:51.000 --> 03:53.000] but they turned around, [03:53.000 --> 03:55.000] they implemented Weyland on top of their own [03:55.000 --> 03:58.000] display stack, display server, [03:58.000 --> 04:01.000] which is Weyland compatible nowadays, [04:01.000 --> 04:03.000] so that's something. [04:03.000 --> 04:05.000] 2016, five devices have been released [04:05.000 --> 04:07.000] with Ubuntu Touch pre-installed, [04:07.000 --> 04:09.000] which is quite interesting for something [04:09.000 --> 04:11.000] that was so niche. [04:11.000 --> 04:14.000] Yay, that was so niche. [04:14.000 --> 04:17.000] That gives me a hint that I should speed up talking. [04:17.000 --> 04:20.000] So, five devices released, [04:20.000 --> 04:22.000] one tablet, four smartphones, [04:22.000 --> 04:27.000] and they all ran, like, Android adaptations [04:27.000 --> 04:29.000] that they ported over using libhybers. [04:29.000 --> 04:32.000] That's how they quickly made it to market, [04:32.000 --> 04:34.000] very easily. [04:34.000 --> 04:36.000] I know for some people that's not interesting at all, [04:36.000 --> 04:38.000] but if you want to go to market really quickly, [04:38.000 --> 04:41.000] that's sadly what they had to do, [04:41.000 --> 04:45.000] and others before them also had to do it. [04:45.000 --> 04:48.000] Even Karsten Monk, who started the libhybers project, [04:48.000 --> 04:50.000] even himself, he said, [04:50.000 --> 04:52.000] well, if you want to do it quickly, [04:52.000 --> 04:54.000] you need to do it that way. [04:54.000 --> 04:58.000] 2017, Canonical gives the Ubuntu Touch project [04:58.000 --> 05:00.000] to UbiPorts. [05:00.000 --> 05:03.000] We took it over, Canonical couldn't finance it anymore. [05:03.000 --> 05:06.000] They had no interest in keeping up with the project, [05:06.000 --> 05:09.000] overall, and gave it over to us, [05:09.000 --> 05:12.000] and we are since then trying to make the best out of it, [05:12.000 --> 05:16.000] and we have released 24 OTAs, [05:16.000 --> 05:20.000] and we're in the process of releasing our first final images [05:20.000 --> 05:25.000] of focal-based Ubuntu Touch 20.04. [05:25.000 --> 05:28.000] We already have a beta version, [05:28.000 --> 05:31.000] which you can download and install in a select few of your devices, [05:31.000 --> 05:35.000] but, yeah, and Unity 8 gets renamed to Lumiri. [05:35.000 --> 05:40.000] Why? Because it was very important for others to package it up [05:40.000 --> 05:45.000] without asking Canonical for every single license, [05:45.000 --> 05:49.000] oh, copyright-related license question. [05:49.000 --> 05:53.000] So we named everything from Canonical and Ubuntu to Lumiri [05:53.000 --> 05:56.000] so that it's generic, others can make use of it, [05:56.000 --> 05:58.000] and they can package it for their distributions. [05:58.000 --> 06:00.000] So, convergence. [06:00.000 --> 06:03.000] What do we mean by convergence? Goddamn. [06:03.000 --> 06:05.000] Screen real estate, first of all. [06:05.000 --> 06:07.000] Let's go back to the basics. [06:07.000 --> 06:10.000] The screen real estate, how many things can I actually put on the phone, [06:10.000 --> 06:13.000] or on a tablet, or on a desktop? [06:13.000 --> 06:15.000] Various, very much, right? [06:15.000 --> 06:18.000] What's the next property? Is it multi-monitor capable? [06:18.000 --> 06:23.000] Is there a possibility that you can plug in an external monitor [06:23.000 --> 06:26.000] into your phone and have it work, like, easily, [06:26.000 --> 06:28.000] without much configuration? [06:28.000 --> 06:34.000] And can you do so wisely, too? Wired, wisely? [06:34.000 --> 06:36.000] Both of them can work. [06:36.000 --> 06:39.000] And which input methods are available to your device [06:39.000 --> 06:42.000] at the moment that you want to use it? [06:42.000 --> 06:45.000] We support various types of input devices, [06:45.000 --> 06:50.000] from touch, keyboard, everything that you expect nowadays [06:50.000 --> 06:52.000] from a personal computing device, [06:52.000 --> 06:55.000] which accounts phones into the mix as well. [06:55.000 --> 07:00.000] And we are pretty much ready to deliver [07:00.000 --> 07:05.000] input events to applications whenever they need to be delivered. [07:05.000 --> 07:10.000] And they deliver everything that the application expects. [07:10.000 --> 07:12.000] If there's a new protocol coming up, [07:12.000 --> 07:17.000] we are pretty much future-proof due to the MIR team working on their stuff. [07:17.000 --> 07:22.000] The way the MIR handles the input and passes it on to the compositor [07:22.000 --> 07:27.000] is very much making it possible to increase the abilities [07:27.000 --> 07:29.000] of input methods overall. [07:29.000 --> 07:34.000] And that gives me a hint to shut up again. [07:34.000 --> 07:38.000] So, convergence. [07:38.000 --> 07:40.000] What is actually convergence? [07:40.000 --> 07:43.000] In our mind, and that is the ability to adapt [07:43.000 --> 07:45.000] to different usage scenarios. [07:45.000 --> 07:48.000] It's not which device does it run on. [07:48.000 --> 07:52.000] It doesn't mean what output device, [07:52.000 --> 07:55.000] it does not only mean what output and input device do you plug in. [07:55.000 --> 07:58.000] It also means how is it adapting. [07:58.000 --> 08:03.000] So, for example, this phone, when you use the wireless display capability, [08:03.000 --> 08:04.000] it's still a phone. [08:04.000 --> 08:08.000] It's just got a wireless screen attached to it, [08:08.000 --> 08:13.000] which displays everything that a normal monitor would do, [08:13.000 --> 08:14.000] but it's still a phone. [08:14.000 --> 08:15.000] It's not wired. [08:15.000 --> 08:19.000] It's only determined whether something is in phone mode [08:19.000 --> 08:21.000] or in desktop mode or in tablet mode, [08:21.000 --> 08:23.000] and that's what the shell usually does. [08:23.000 --> 08:27.000] I will get to the components and each of their responsibilities later. [08:27.000 --> 08:30.000] But for now, the basics are convergence. [08:30.000 --> 08:34.000] Adapt to a usage scenario that you see fit as the shell [08:34.000 --> 08:36.000] or as a user, basically, [08:36.000 --> 08:38.000] because we cater towards what the user might want [08:38.000 --> 08:41.000] at a very specific moment in time. [08:41.000 --> 08:44.000] Both the shell and the applications need to be able to adapt [08:44.000 --> 08:46.000] without the applications adapting. [08:46.000 --> 08:49.000] You have a great shell and you can't use anything with it, right? [08:49.000 --> 08:52.000] So, we need the applications to follow the same rules, [08:52.000 --> 08:55.000] to follow the same standards, [08:55.000 --> 08:58.000] and make it easy so with our custom UI toolkit [08:58.000 --> 09:01.000] that we have built based on Qt and QML. [09:01.000 --> 09:04.000] It actually existed before Qt front trolls. [09:04.000 --> 09:05.000] One was a thing. [09:05.000 --> 09:09.000] So, canonical had to get something out of the sleeves real quickly [09:09.000 --> 09:15.000] and they made up the nowadays called Lumiere UI toolkit. [09:15.000 --> 09:17.000] Back then it was just Ubuntu toolkit. [09:17.000 --> 09:21.000] And another thing that goes into the whole convergence thing [09:21.000 --> 09:27.000] is pausing the application as you expect nowadays from a phone [09:27.000 --> 09:30.000] where the UI thread of an application is paused. [09:30.000 --> 09:31.000] It doesn't do anything. [09:31.000 --> 09:34.000] How can we provide the same functionality [09:34.000 --> 09:38.000] with a typical GNU slash Linux way of handling things? [09:38.000 --> 09:41.000] Like, we don't have this side gold Android process [09:41.000 --> 09:44.000] that spawns other services in the background [09:44.000 --> 09:48.000] and it does everything quote unquote hidden away from the user. [09:48.000 --> 09:52.000] We as application developers need to think differently about [09:52.000 --> 09:58.000] how to approach a modern day usage scenario [09:58.000 --> 10:01.000] with a smartphone being able to power save [10:01.000 --> 10:04.000] as well as being feasible and doing stuff in the background [10:04.000 --> 10:05.000] when it's supposed to do it. [10:05.000 --> 10:08.000] Not to run in the background every time, all the time [10:08.000 --> 10:10.000] because that's wasting battery. [10:10.000 --> 10:13.000] But we need to make sure that the application lifecycle [10:13.000 --> 10:15.000] is something that works on a phone [10:15.000 --> 10:18.000] and it might work differently on a tablet [10:18.000 --> 10:20.000] and it might work differently on a desktop. [10:20.000 --> 10:22.000] It definitely does differently on a desktop, right? [10:22.000 --> 10:25.000] You don't want an application to pause underneath your feed [10:25.000 --> 10:26.000] or something, right? [10:26.000 --> 10:28.000] Pulling the rug away. [10:28.000 --> 10:32.000] So, we do this for preservation of battery life [10:32.000 --> 10:36.000] and for that, we need different policies [10:36.000 --> 10:39.000] for every usage scenario. [10:39.000 --> 10:43.000] And we do that by using Lumiri App Launch [10:43.000 --> 10:46.000] which is a little library that handles everything [10:46.000 --> 10:48.000] related to launching the applications. [10:48.000 --> 10:51.000] It puts everything in a C group as you expect nowadays. [10:51.000 --> 10:54.000] Specifically, it uses system to user sessions for that [10:54.000 --> 10:58.000] and it also helps with application confinement and security [10:58.000 --> 11:00.000] because on open to touch at least, [11:00.000 --> 11:02.000] the main goal is to provide a store [11:02.000 --> 11:05.000] that other people can download applications from [11:05.000 --> 11:08.000] without worrying too much whether their data [11:08.000 --> 11:10.000] can be accessed or not. [11:10.000 --> 11:12.000] Of course, we can trust every application [11:12.000 --> 11:14.000] but then we would need to review them. [11:14.000 --> 11:16.000] They're a typical traditional open source way of, [11:16.000 --> 11:19.000] a Debian way, whatever you might want to call it, [11:19.000 --> 11:23.000] of importing data, software, code and auditing it [11:23.000 --> 11:26.000] and then releasing it to others. [11:26.000 --> 11:27.000] That's not what we want to do. [11:27.000 --> 11:30.000] We want to give developer easy access [11:30.000 --> 11:34.000] to release their stuff to users that they care about. [11:34.000 --> 11:37.000] And for that, we need application confinement [11:37.000 --> 11:40.000] and a few security practices that are part [11:40.000 --> 11:42.000] of the whole convergence story [11:42.000 --> 11:47.000] of the application lifecycle model that we have. [11:47.000 --> 11:51.000] And the result or at least the dream for Canonical was this. [11:51.000 --> 11:54.000] You have a phone, a tablet, a laptop and even a TV [11:54.000 --> 11:56.000] which can run the same shell. [11:56.000 --> 11:59.000] And that's the last missing property of convergence. [11:59.000 --> 12:01.000] You have one code base running everywhere. [12:01.000 --> 12:08.000] You have one code that is sufficiently adaptive [12:08.000 --> 12:13.000] to each situation that it works as you expect. [12:13.000 --> 12:15.000] It looks similar enough. [12:15.000 --> 12:17.000] The input methods, of course, differ [12:17.000 --> 12:21.000] but in reality, they provide exactly what the user [12:21.000 --> 12:23.000] wants at a specific moment in time. [12:23.000 --> 12:25.000] Swipe on the phone, it works like a phone. [12:25.000 --> 12:27.000] Use your remote control on the TV. [12:27.000 --> 12:28.000] It works like a TV. [12:28.000 --> 12:29.000] It looks similar. [12:29.000 --> 12:31.000] It feels similar. [12:31.000 --> 12:33.000] The user experience part, right? [12:33.000 --> 12:36.000] So, next one. [12:36.000 --> 12:38.000] Migrations to new technologies. [12:38.000 --> 12:40.000] It took us some time. [12:40.000 --> 12:42.000] It took us some time to move over to system D [12:42.000 --> 12:46.000] but the concept is very much applied [12:46.000 --> 12:50.000] because upstart back then already used to start stuff [12:50.000 --> 12:52.000] as individual session services. [12:52.000 --> 12:58.000] And our Lumiri app launch, it reacts to apps appearing [12:58.000 --> 13:00.000] and disappearing for us. [13:00.000 --> 13:02.000] It gives us the events. [13:02.000 --> 13:04.000] Hey, application XYZ is gone. [13:04.000 --> 13:06.000] Remove it from the launcher because it's gone [13:06.000 --> 13:09.000] and remove all the resources that you have allocated to RAM. [13:09.000 --> 13:10.000] Right? [13:10.000 --> 13:15.000] Migration to new mirror and Wayland. [13:15.000 --> 13:18.000] That's a more interesting one because that one is pain. [13:18.000 --> 13:22.000] Mirror 2.0 drop support for the old protocol [13:22.000 --> 13:24.000] that everyone complained about, right? [13:24.000 --> 13:27.000] Current Lumiri on Ubuntu Touch does a split [13:27.000 --> 13:29.000] like Charles Kloss and them. [13:29.000 --> 13:34.000] And in that sense, it runs both mirror client and Wayland. [13:34.000 --> 13:38.000] And through Wayland, it also supports X Wayland. [13:38.000 --> 13:44.000] So, the Wayland support on mirror on Lumiri is good enough [13:44.000 --> 13:47.000] that you can actually spawn a GIMP application [13:47.000 --> 13:50.000] running through X Wayland on a libhybers device [13:50.000 --> 13:53.000] or on a Wayland device depending on which X Wayland version [13:53.000 --> 13:54.000] you install. [13:54.000 --> 13:56.000] And it works. [13:56.000 --> 13:58.000] The problem is we want to go Wayland everywhere. [13:58.000 --> 14:03.000] And for Wayland everywhere, we need to adapt a few new concepts, [14:03.000 --> 14:06.000] a few new things that are right at this moment in development [14:06.000 --> 14:08.000] on the mirror side. [14:08.000 --> 14:12.000] So, Miral, an abstraction layer which allows basic windowing [14:12.000 --> 14:17.000] to be done to really receive data about a window being placed [14:17.000 --> 14:20.000] somewhere and stuff like that. [14:20.000 --> 14:24.000] Miral takes it another step further which gives us the ability [14:24.000 --> 14:30.000] to get those trust prompts that we use on Ubuntu Touch. [14:30.000 --> 14:34.000] Those dialogues that pop up underneath an application [14:34.000 --> 14:37.000] and overlay themselves on top of an application [14:37.000 --> 14:40.000] where you have to say, okay, I give this application access [14:40.000 --> 14:41.000] to my GPS. [14:41.000 --> 14:43.000] I give this application access to my microphone. [14:43.000 --> 14:44.000] It doesn't do it by default. [14:44.000 --> 14:45.000] It doesn't allow it. [14:45.000 --> 14:47.000] You, as a user, need to allow it. [14:47.000 --> 14:49.000] And for that, we need a few more components, [14:49.000 --> 14:52.000] like trust prompt integration into Miral. [14:52.000 --> 14:54.000] And screen casting is also going to be tough [14:54.000 --> 14:59.000] because screen casting is just different enough [14:59.000 --> 15:02.000] on mainline devices versus hybrid devices [15:02.000 --> 15:05.000] that buffer passing might work. [15:05.000 --> 15:10.000] But then how are we going to tell which buffer [15:10.000 --> 15:12.000] looks like an Android buffer? [15:12.000 --> 15:16.000] And I think I need to figure out a few things on my side [15:16.000 --> 15:19.000] with regards to Wayland and how WL buffers [15:19.000 --> 15:21.000] are supposed to be passed around. [15:21.000 --> 15:26.000] But if anyone here has a lot of Wayland knowledge [15:26.000 --> 15:29.000] and wants to help us out here and wants to have [15:29.000 --> 15:32.000] some screen casting for themselves too, [15:32.000 --> 15:36.000] please get in touch with me and we can figure out [15:36.000 --> 15:39.000] something that works for both sides, I guess. [15:39.000 --> 15:44.000] So the UI toolkit, Lumiri UI toolkit, [15:44.000 --> 15:47.000] this is a beautiful thing if you ask me. [15:47.000 --> 15:48.000] I really like this. [15:48.000 --> 15:50.000] The way that our browser, for example, [15:50.000 --> 15:53.000] that you can see the Chrome of on the top, [15:53.000 --> 15:57.000] that's the Lumiri UI toolkit rendering the tabs. [15:57.000 --> 16:00.000] And depending on whether you resize the window, [16:00.000 --> 16:03.000] it actually turns into something that you have to swipe up [16:03.000 --> 16:06.000] from the bottom edge of your phone. [16:06.000 --> 16:11.000] Because this responsive design thing is one way to achieve [16:11.000 --> 16:13.000] convergence in a sense. [16:13.000 --> 16:16.000] So the UI toolkit, it follows our human interface guidelines, [16:16.000 --> 16:18.000] allows for convergent use cases, [16:18.000 --> 16:23.000] and it is used by the Lumiri shell throughout the code base. [16:23.000 --> 16:26.000] So we have something that can be used by both apps [16:26.000 --> 16:28.000] and the shell so that both look the same [16:28.000 --> 16:31.000] compared to others who write one toolkit for the shell [16:31.000 --> 16:34.000] and one toolkit for everything else. [16:34.000 --> 16:36.000] And in this sense, we have something that works [16:36.000 --> 16:38.000] on both sides of the equation. [16:38.000 --> 16:42.000] It's abstracted by Qt, and Qt does everything for us. [16:42.000 --> 16:47.000] But what it does not do for us is handle the wayland connections [16:47.000 --> 16:52.000] for that we need Mir, and we need Qt Mir as an integration point [16:52.000 --> 16:57.000] that takes Mir's window contents, the buffers, [16:57.000 --> 17:00.000] and displays them on the screen, [17:00.000 --> 17:03.000] or rather the scene graph of Qt. [17:03.000 --> 17:05.000] So when you put things on the scene graph, [17:05.000 --> 17:08.000] it's like this tree type of structure, [17:08.000 --> 17:12.000] you put things on the screen, they get rendered, [17:12.000 --> 17:14.000] and then they get displayed on the screen as you expect [17:14.000 --> 17:16.000] using OpenGL. [17:16.000 --> 17:20.000] And Qt Mir also already does basic window management, [17:20.000 --> 17:25.000] but it doesn't do everything that Lumiri needs to do. [17:25.000 --> 17:27.000] It already does multiple monitors and also supports [17:27.000 --> 17:31.000] multiple input types, whatever you expect nowadays [17:31.000 --> 17:37.000] from a display that can be driven with input devices, right? [17:37.000 --> 17:42.000] Lumiri itself, the shell, it uses Qt Mir [17:42.000 --> 17:44.000] for the application window presentation. [17:44.000 --> 17:47.000] So everything that Qt Mir gets from Mir, [17:47.000 --> 17:53.000] it gives further down to Lumiri, Lumiri displays it. [17:53.000 --> 17:58.000] We can even put some shader effects onto those tiny windows [17:58.000 --> 18:01.000] and make it a little colorful, make them explode [18:01.000 --> 18:04.000] as you used to from compass times, [18:04.000 --> 18:08.000] and have them render quite interesting stuff [18:08.000 --> 18:12.000] just because of the way that Qt does animation in QML, [18:12.000 --> 18:14.000] which is quite interesting. [18:14.000 --> 18:16.000] And it also does more sophisticated window management, [18:16.000 --> 18:18.000] so window snapping, multiple workspaces, [18:18.000 --> 18:20.000] the whole thing that you expect, right? [18:20.000 --> 18:24.000] And Ethercast, that's another one. [18:24.000 --> 18:27.000] This one is not for the mainline folks yet, [18:27.000 --> 18:30.000] but take this as an invitation for mainline folks [18:30.000 --> 18:33.000] to help us get it working on the Pinephone Pro, for example, [18:33.000 --> 18:36.000] which someone in the community has actually started [18:36.000 --> 18:38.000] to port on, right? [18:38.000 --> 18:43.000] And they got Ubuntu Touch running on the Pinephone Pro [18:43.000 --> 18:46.000] with Lumiri, with everything that you expect, [18:46.000 --> 18:48.000] even the trust prompts, because they required [18:48.000 --> 18:51.000] a few patches to our side. [18:51.000 --> 18:56.000] And Ethercast in this scenario wouldn't work [18:56.000 --> 18:59.000] because it doesn't know how to take those DRM and GBM [18:59.000 --> 19:02.000] allocated buffers and pass it on to an encoder. [19:02.000 --> 19:04.000] We just need the screencasting and the video encoding [19:04.000 --> 19:06.000] to be done quickly. [19:06.000 --> 19:11.000] Then we can achieve sort of like a 20% CPU usage [19:11.000 --> 19:16.000] on one core type of deal for wireless display support. [19:16.000 --> 19:20.000] So 20% of one CPU core being in use, [19:20.000 --> 19:24.000] for me that counts as nothing, almost, right? [19:24.000 --> 19:29.000] It's definitely usable, and I regularly do it [19:29.000 --> 19:32.000] with my Pixel 3a, and it works flawlessly, right? [19:32.000 --> 19:36.000] And one last notable component, or two of them, [19:36.000 --> 19:39.000] is the off-screen keyboard, which also plays into the whole [19:39.000 --> 19:42.000] Lumiri story, so to say. [19:42.000 --> 19:46.000] So, Malit. We use Malit as the off-screen keyboard framework, [19:46.000 --> 19:49.000] and Lumiri keyboard is a plug into it, [19:49.000 --> 19:53.000] which connects over Wayland or over Miracleint to the shell. [19:53.000 --> 19:57.000] And says, hey, I'm here. Take me as your input device. [19:57.000 --> 20:01.000] And the shell says, yes, I like you. [20:01.000 --> 20:05.000] In that sense, the Lumiri keyboard, it uses the Lumiri UI [20:05.000 --> 20:09.000] toolkit as well as you would expect. [20:09.000 --> 20:13.000] And it also has some nice little features like you swipe up. [20:13.000 --> 20:17.000] When you have the off-screen keyboard sliding up, [20:17.000 --> 20:19.000] and you swipe up from the bottom edge, [20:19.000 --> 20:22.000] you get to do text selections very, very nicely, [20:22.000 --> 20:26.000] and you can also do the same with the spacebar, [20:26.000 --> 20:28.000] with the space key. [20:28.000 --> 20:31.000] That's a totally awesome thing to play around with. [20:31.000 --> 20:34.000] And with that being done, I think... [20:34.000 --> 20:36.000] We have five minutes left in total. [20:36.000 --> 20:37.000] In total? [20:37.000 --> 20:38.000] Yes. [20:38.000 --> 20:43.000] Then we're going to skip the demo because you saw everything already. [20:43.000 --> 20:45.000] Well, that's pretty much it. [20:45.000 --> 20:49.000] If you have any questions, I will play around with the device. [20:49.000 --> 20:52.000] We can interactively together use it, right? [20:52.000 --> 20:53.000] OK, there's a question. [20:53.000 --> 20:57.000] So if I want to use my phone as an input device on Gento, [20:57.000 --> 21:00.000] do I install Malik or something? [21:00.000 --> 21:03.000] As an input device on what? [21:03.000 --> 21:05.000] Gento. [21:05.000 --> 21:09.000] Are you planning to bring the shell over the Lumiri experience [21:09.000 --> 21:11.000] to Gento, for that matter? [21:11.000 --> 21:14.000] I want, for example, I have Gento, I have Wayland, [21:14.000 --> 21:17.000] and I want to use my phone as a touchpad. [21:17.000 --> 21:19.000] No, no, that's because it is integrated. [21:19.000 --> 21:22.000] This is the virtual touchpad of the phone, [21:22.000 --> 21:25.000] and it's because it's integrated with the shell, [21:25.000 --> 21:28.000] with the Wayland desktop that we are running. [21:28.000 --> 21:30.000] This is on screen. [21:30.000 --> 21:32.000] This is Lumiri, yeah. [21:32.000 --> 21:34.000] This is all integrated into Lumiri. [21:34.000 --> 21:38.000] So Lumiri knows this is a virtual touchpad. [21:38.000 --> 21:41.000] Let me do all the virtual touchpad stuff, [21:41.000 --> 21:43.000] and it does so by... [21:43.000 --> 21:47.000] But is it available as a separate package that I'm creating? [21:47.000 --> 21:48.000] No, no, no, no. [21:48.000 --> 21:51.000] It's integrated into the system's desktop. [21:51.000 --> 21:54.000] We're not playing Lego here. [21:54.000 --> 21:58.000] I'm sorry, I didn't want to sound mean, [21:58.000 --> 22:02.000] but it's like those things need it to be integrated [22:02.000 --> 22:04.000] because they want it to release very soon, [22:04.000 --> 22:06.000] very quickly, very on time. [22:06.000 --> 22:10.000] But they need to have a separate library, for example, [22:10.000 --> 22:13.000] using different... It uses U-inputs, [22:13.000 --> 22:18.000] the typical user space injects events into the shell. [22:18.000 --> 22:23.000] That's all it does. U-inputs, U-input specifically. [22:23.000 --> 22:26.000] Sorry for my intellectual environment. [22:26.000 --> 22:28.000] No. [22:28.000 --> 22:31.000] Is there a plan to have a separate package [22:31.000 --> 22:34.000] that I can use in a different distribution [22:34.000 --> 22:36.000] where I use a Wayland, for example? [22:36.000 --> 22:38.000] This is Wayland. This is totally Wayland. [22:38.000 --> 22:41.000] Where you use Wayland. This is a Wayland desktop. [22:41.000 --> 22:44.000] This is the desktop, but it also does the virtual screen, [22:44.000 --> 22:47.000] the virtual input method for you. [22:47.000 --> 22:51.000] You could, in theory, create a new Android, [22:51.000 --> 22:56.000] selfish, all of them, Mobian application [22:56.000 --> 23:00.000] that just does that and transfers it over the wire [23:00.000 --> 23:03.000] to a desktop, but this is not it. [23:03.000 --> 23:05.000] This is all integrated. [23:05.000 --> 23:08.000] You want something like synergy, but synergy is the tool [23:08.000 --> 23:11.000] which allows you to, like, have a separate machine running [23:11.000 --> 23:14.000] and then move your mouse over to the open screen border. [23:14.000 --> 23:16.000] They want something like synergy, but then accept that [23:16.000 --> 23:18.000] you use the mouse over yourself. [23:18.000 --> 23:20.000] Right. [23:20.000 --> 23:23.000] But synergy doesn't work at a Wayland, [23:23.000 --> 23:26.000] but work is on the way to the way synergy works. [23:26.000 --> 23:31.000] Oh, multiple workspaces. I haven't shown that you're that. [23:31.000 --> 23:33.000] Multiple workspaces. [23:33.000 --> 23:36.000] At a workspace. Hooray. [23:43.000 --> 23:45.000] It's just connected and it's done. [23:45.000 --> 23:48.000] We do detect certain properties of the screen, [23:48.000 --> 23:52.000] whether it is a TV screen, projector, monitor, [23:52.000 --> 23:54.000] integrated thing. [23:54.000 --> 23:59.000] We have a whole enum full of different types of monitors [23:59.000 --> 24:01.000] that can be connected. [24:01.000 --> 24:05.000] And we also do a check by screen size, [24:05.000 --> 24:10.000] by, I think, by scaling of the device. [24:10.000 --> 24:13.000] So if you put it on an 11-inch device, [24:13.000 --> 24:16.000] and depending on the pixel density, [24:16.000 --> 24:19.000] it would behave differently, right? [24:19.000 --> 24:21.000] But yeah. [24:21.000 --> 24:23.000] That's pretty much how it looks like. [24:23.000 --> 24:26.000] This is a terminal that I'm not going to input my password in. [24:26.000 --> 24:28.000] Yeah? [24:28.000 --> 24:35.000] This is the Fairphone 4. [24:35.000 --> 24:36.000] All right. [24:36.000 --> 24:38.000] The last questions. [24:38.000 --> 24:39.000] Are you public? [24:39.000 --> 24:40.000] OK. [24:40.000 --> 24:43.000] Public can already start setting up stuff for the mix. [24:43.000 --> 24:45.000] So that ends the demo part, I guess. [24:45.000 --> 24:46.000] Yes. [24:46.000 --> 24:47.000] Sorry for that. [24:47.000 --> 24:50.000] But you still have some time for question answers while public. [24:50.000 --> 24:51.000] All right. [24:51.000 --> 24:52.000] Sure. [24:52.000 --> 24:58.000] Thank you.