mirror of
https://github.com/genodelabs/genode.git
synced 2025-04-08 11:55:24 +00:00
sculpt: screen capturing and event injection
This patch adds session-routing options to connect components to the capture/event interfaces of the global nitpicker GUI server or the leitzentrale GUI server. It thereby enables the implementation of screen capturing components, remote management tools, or virtual keyboards. Since those services are very powerful, they are subsumed under the "hardware" category of the component graph as opposed to the GUI category, which guarantees the separation of clients. Fixes #4053
This commit is contained in:
parent
d2fc834bfa
commit
8f1db47c26
@ -13,3 +13,5 @@ gui_session
|
||||
terminal_session
|
||||
rtc_session
|
||||
input_session
|
||||
event_session
|
||||
capture_session
|
||||
|
@ -407,6 +407,8 @@ install_config {
|
||||
<affinity xpos="1" width="1"/> <!-- decouple leitzentrale from boot CPU -->
|
||||
<provides>
|
||||
<service name="Gui"/>
|
||||
<service name="Capture"/>
|
||||
<service name="Event"/>
|
||||
<service name="File_system"/> <!-- fonts -->
|
||||
<service name="ROM"/> <!-- view dialog ROMs -->
|
||||
<service name="Report"/> <!-- view hover reports -->
|
||||
@ -490,6 +492,10 @@ install_config {
|
||||
<service name="LOG" label="unlogged"> <parent/> </service>
|
||||
<service name="LOG"> <child name="log"/> </service>
|
||||
<service name="ROM" label="nic_drv"> <parent label="} [nic_drv] {"/> </service>
|
||||
<service name="Event" label="global"> <child name="nitpicker"/> </service>
|
||||
<service name="Event" label="leitzentrale"> <child name="leitzentrale"/> </service>
|
||||
<service name="Capture" label="global"> <child name="nitpicker"/> </service>
|
||||
<service name="Capture" label="leitzentrale"> <child name="leitzentrale"/> </service>
|
||||
<any-service> <parent/> </any-service>
|
||||
</route>
|
||||
</start>
|
||||
|
@ -23,6 +23,12 @@
|
||||
<service name="Gui">
|
||||
<default-policy> <child name="wm"/> </default-policy> </service>
|
||||
|
||||
<service name="Capture">
|
||||
<default-policy> <child name="nitpicker"/> </default-policy> </service>
|
||||
|
||||
<service name="Event">
|
||||
<default-policy> <child name="nitpicker"/> </default-policy> </service>
|
||||
|
||||
<service name="File_system">
|
||||
<default-policy> <child name="fonts_fs"/> </default-policy> </service>
|
||||
|
||||
@ -76,11 +82,15 @@
|
||||
|
||||
<start name="nitpicker" caps="200">
|
||||
<resource name="RAM" quantum="8M"/>
|
||||
<provides> <service name="Gui"/> </provides>
|
||||
<provides>
|
||||
<service name="Gui"/> <service name="Capture"/> <service name="Event"/>
|
||||
</provides>
|
||||
<config focus="rom" request_input="yes" request_framebuffer="yes">
|
||||
<background color="#272f45"/>
|
||||
<domain name="default" layer="1" content="client" label="no" hover="always" focus="click"/>
|
||||
<default-policy domain="default"/>
|
||||
<capture/>
|
||||
<event/>
|
||||
</config>
|
||||
<route>
|
||||
<service name="Input"> <child name="gui_fb"/> </service>
|
||||
|
@ -21,6 +21,8 @@
|
||||
#include <vm_session/vm_session.h>
|
||||
#include <timer_session/connection.h>
|
||||
#include <io_port_session/io_port_session.h>
|
||||
#include <event_session/event_session.h>
|
||||
#include <capture_session/capture_session.h>
|
||||
|
||||
/* included from depot_deploy tool */
|
||||
#include <children.h>
|
||||
@ -1668,6 +1670,8 @@ void Sculpt::Main::_generate_runtime_config(Xml_generator &xml) const
|
||||
gen_parent_service<Io_mem_session>(xml);
|
||||
gen_parent_service<Io_port_session>(xml);
|
||||
gen_parent_service<Irq_session>(xml);
|
||||
gen_parent_service<Event::Session>(xml);
|
||||
gen_parent_service<Capture::Session>(xml);
|
||||
});
|
||||
|
||||
xml.node("affinity-space", [&] () {
|
||||
|
@ -31,6 +31,8 @@ struct Sculpt::Route : List_model<Route>::Element
|
||||
case Service::Type::AUDIO_IN: return "audio_in";
|
||||
case Service::Type::AUDIO_OUT: return "audio_out";
|
||||
case Service::Type::BLOCK: return "block";
|
||||
case Service::Type::EVENT: return "event";
|
||||
case Service::Type::CAPTURE: return "capture";
|
||||
case Service::Type::FILE_SYSTEM: return "file_system";
|
||||
case Service::Type::NIC: return "nic";
|
||||
case Service::Type::GUI: return "gui";
|
||||
@ -58,6 +60,8 @@ struct Sculpt::Route : List_model<Route>::Element
|
||||
case Service::Type::AUDIO_IN: return "Audio input";
|
||||
case Service::Type::AUDIO_OUT: return "Audio output";
|
||||
case Service::Type::BLOCK: return "Block device";
|
||||
case Service::Type::EVENT: return "Event";
|
||||
case Service::Type::CAPTURE: return "Capture";
|
||||
case Service::Type::FILE_SYSTEM: return "File system";
|
||||
case Service::Type::NIC: return "Network";
|
||||
case Service::Type::GUI: return "GUI";
|
||||
|
@ -74,7 +74,9 @@ class Sculpt::Runtime_config
|
||||
|| (service == "IO_MEM")
|
||||
|| (service == "Rtc")
|
||||
|| (service == "IRQ")
|
||||
|| (service == "TRACE");
|
||||
|| (service == "TRACE")
|
||||
|| (service == "Event")
|
||||
|| (service == "Capture");
|
||||
if (hardware) {
|
||||
result = "hardware";
|
||||
return;
|
||||
@ -327,6 +329,10 @@ class Sculpt::Runtime_config
|
||||
_backdrop { _r, Type::GUI, "desktop background", "backdrop" },
|
||||
_lockscreen{ _r, Type::GUI, "desktop lock screen", "lock_screen" },
|
||||
_nitpicker { _r, Type::GUI, "system GUI server" },
|
||||
_lz_event { _r, Type::EVENT, "management GUI events", "leitzentrale" },
|
||||
_event { _r, Type::EVENT, "system input events", "global" },
|
||||
_lz_capture{ _r, Type::CAPTURE, "management GUI", "leitzentrale" },
|
||||
_capture { _r, Type::CAPTURE, "system GUI", "global" },
|
||||
_config_fs { _r, Type::FILE_SYSTEM, "writeable system configuration", "config" },
|
||||
_report_fs { _r, Type::FILE_SYSTEM, "read-only system reports", "report" },
|
||||
_capslock { _r, Type::ROM, "global capslock state", "capslock" },
|
||||
|
@ -25,9 +25,9 @@ struct Sculpt::Service
|
||||
typedef String<32> Info;
|
||||
|
||||
enum class Type {
|
||||
AUDIO_IN, AUDIO_OUT, BLOCK, FILE_SYSTEM, NIC, GUI,
|
||||
RM, IO_MEM, IO_PORT, IRQ, REPORT, ROM, TERMINAL, TRACE,
|
||||
USB, RTC, PLATFORM, VM, PD, UNDEFINED };
|
||||
AUDIO_IN, AUDIO_OUT, BLOCK, EVENT, CAPTURE, FILE_SYSTEM, NIC, GUI,
|
||||
RM, IO_MEM, IO_PORT, IRQ, REPORT, ROM, TERMINAL, TRACE, USB, RTC,
|
||||
PLATFORM, VM, PD, UNDEFINED };
|
||||
|
||||
enum class Match_label { EXACT, LAST };
|
||||
|
||||
@ -46,6 +46,8 @@ struct Sculpt::Service
|
||||
case Type::AUDIO_IN: return "Audio_in";
|
||||
case Type::AUDIO_OUT: return "Audio_out";
|
||||
case Type::BLOCK: return "Block";
|
||||
case Type::EVENT: return "Event";
|
||||
case Type::CAPTURE: return "Capture";
|
||||
case Type::FILE_SYSTEM: return "File_system";
|
||||
case Type::NIC: return "Nic";
|
||||
case Type::GUI: return "Gui";
|
||||
|
Loading…
x
Reference in New Issue
Block a user