pub struct XWayland { /* private fields */ }xwayland only.Expand description
A handle to a running XWayland process. Using XWayland as an xserver for X11-based clients requires two connections: one wayland socket, where XWayland creates surfaces for its clients, and one X11 socket, where a compositor’s implementation of an X11 window manager connects and handles X11 events.
┌───────────────────┐
│ │
│ │ X11 Clients
│ Xwayland │ ◄─────
│ │
│ │
└──┬──────────────▲─┘
│ │
Wayland Socket│ │ X11 Socket
│ │
│ │
┌────────────▼──────────────┼────────────┐
│ Compositor │ │
│ ┌─┴───────┐ │
│ │ XWM │ │
│ │ │ │
│ └─────────┘ │
│ │
└────────────────────────────────────────┘This struct handles integrating the XWayland process itself into the event loop, but a separate X11 window manager implementation is needed as well to support X11 clients.
To shut down the instance, dropping this handle is generally sufficient, along with the X11 connection that was passed to the window manager implementation, if any. The process will die once the connections to it are closed.
Implementations§
Source§impl XWayland
impl XWayland
Sourcepub fn spawn<K, V, I, F>(
dh: &DisplayHandle,
display: impl Into<Option<u32>>,
envs: I,
open_abstract_socket: bool,
stdout: impl Into<Stdio>,
stderr: impl Into<Stdio>,
user_data: F,
) -> Result<(Self, Client)>
pub fn spawn<K, V, I, F>( dh: &DisplayHandle, display: impl Into<Option<u32>>, envs: I, open_abstract_socket: bool, stdout: impl Into<Stdio>, stderr: impl Into<Stdio>, user_data: F, ) -> Result<(Self, Client)>
Spawns an XWayland server instance. Xwayland must be on the PATH and
executable.
§Arguments
display- if provided, only the given display number will be tested. If you wish smithay to choose a display for you, passNone.envs- Allows additionally environment variables to be set when launching XWayland.open_abstract_socket- Open an abstract socket as well as filesystem sockets (only on available on Linux).stdout, stderr- Allows redirecting stdout and stderr of the XWayland process. XWayland output is rarely useful, soStdio::null()is a good choice if you’re not sure.user_data- Allows mutating theXWaylandClientData::user_data-map before the client is added to the wayland display. Useful for initializing state for global filters.
Returns a handle to the XWayland instance and the
Client representing the XWayland server. The
handle can be inserted in your event loop, and If everything goes well,
you’ll eventually receive an XWaylandEvent::Ready, indicating that
it’s time to start the X11 window manager.
Sourcepub fn display_number(&self) -> u32
pub fn display_number(&self) -> u32
Returns the X11 display used by the instance, suitable for setting the
DISPLAY environment variable.
Sourcepub fn poll_fd(&self) -> BorrowedFd<'_>
pub fn poll_fd(&self) -> BorrowedFd<'_>
Returns a file descriptor which can be polled for readiness. When the fd is readable, the XWayland server’s readiness can be checked with take_socket.
Sourcepub fn take_socket(&mut self) -> Result<Option<UnixStream>>
pub fn take_socket(&mut self) -> Result<Option<UnixStream>>
Checks if the XWayland instance is ready. If XWayland has fully started, this will return the X11 socket connected to the running instance.
Calling take_socket successfully transfers ownership of the connection
to the caller. After returning Some the first time, it will always
return None.
An Err result is only returned if the XWayland instance has exited
unexpectedly.
This is a low-level method. Using the instance as an event source is the recommended way to interact with it.
Trait Implementations§
Source§impl EventSource for XWayland
impl EventSource for XWayland
Source§type Event = XWaylandEvent
type Event = XWaylandEvent
Source§type Error = Error
type Error = Error
process_events() (not the user callback!).Source§fn process_events<F>(
&mut self,
readiness: Readiness,
token: Token,
callback: F,
) -> Result<PostAction>
fn process_events<F>( &mut self, readiness: Readiness, token: Token, callback: F, ) -> Result<PostAction>
Source§fn register(
&mut self,
poll: &mut Poll,
factory: &mut TokenFactory,
) -> Result<()>
fn register( &mut self, poll: &mut Poll, factory: &mut TokenFactory, ) -> Result<()>
Source§fn reregister(
&mut self,
poll: &mut Poll,
factory: &mut TokenFactory,
) -> Result<()>
fn reregister( &mut self, poll: &mut Poll, factory: &mut TokenFactory, ) -> Result<()>
Source§fn unregister(&mut self, poll: &mut Poll) -> Result<()>
fn unregister(&mut self, poll: &mut Poll) -> Result<()>
Source§const NEEDS_EXTRA_LIFECYCLE_EVENTS: bool = false
const NEEDS_EXTRA_LIFECYCLE_EVENTS: bool = false
EventSource::before_sleep
and EventSource::before_handle_events notifications. These are opt-in because
they require more expensive checks, and almost all sources will not need these notificationsSource§fn before_sleep(&mut self) -> Result<Option<(Readiness, Token)>, Error>
fn before_sleep(&mut self) -> Result<Option<(Readiness, Token)>, Error>
poll is about to begin Read moreSource§fn before_handle_events(&mut self, events: EventIterator<'_>)
fn before_handle_events(&mut self, events: EventIterator<'_>)
EventSource::process_events will
be called with the given events for this source. The iterator may be empty,
which indicates that no events were generated for this source Read moreAuto Trait Implementations§
impl Freeze for XWayland
impl !RefUnwindSafe for XWayland
impl Send for XWayland
impl Sync for XWayland
impl Unpin for XWayland
impl !UnwindSafe for XWayland
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.