XWayland

Struct XWayland 

Source
pub struct XWayland { /* private fields */ }
Available on crate feature 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

Source

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)>
where I: IntoIterator<Item = (K, V)>, K: AsRef<OsStr>, V: AsRef<OsStr>, F: FnOnce(&UserDataMap),

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, pass None.
  • 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, so Stdio::null() is a good choice if you’re not sure.
  • user_data - Allows mutating the XWaylandClientData::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.

Source

pub fn display_number(&self) -> u32

Returns the X11 display used by the instance, suitable for setting the DISPLAY environment variable.

Source

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.

Source

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 Debug for XWayland

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Drop for XWayland

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl EventSource for XWayland

Source§

type Event = XWaylandEvent

The type of events generated by your source.
Source§

type Metadata = ()

Some metadata of your event source Read more
Source§

type Ret = ()

The return type of the user callback Read more
Source§

type Error = Error

The error type returned from process_events() (not the user callback!).
Source§

fn process_events<F>( &mut self, readiness: Readiness, token: Token, callback: F, ) -> Result<PostAction>
where F: FnMut(Self::Event, &mut Self::Metadata) -> Self::Ret,

Process any relevant events Read more
Source§

fn register( &mut self, poll: &mut Poll, factory: &mut TokenFactory, ) -> Result<()>

Register yourself to this poll instance Read more
Source§

fn reregister( &mut self, poll: &mut Poll, factory: &mut TokenFactory, ) -> Result<()>

Re-register your file descriptors Read more
Source§

fn unregister(&mut self, poll: &mut Poll) -> Result<()>

Unregister your file descriptors Read more
Source§

const NEEDS_EXTRA_LIFECYCLE_EVENTS: bool = false

Whether this source needs to be sent the 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 notifications
Source§

fn before_sleep(&mut self) -> Result<Option<(Readiness, Token)>, Error>

Notification that a single poll is about to begin Read more
Source§

fn before_handle_events(&mut self, events: EventIterator<'_>)

Notification that polling is complete, and 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 more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

Convert 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)

Convert &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)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more