PipeWire Proxies

Proxy

Lua objects that bind a WpProxy contain the following methods:

Proxy.get_interface_type(self)

Binds wp_proxy_get_interface_type()

Parameters:

self -- the proxy

Returns:

the proxy type, the proxy type version

Return type:

string, integer

PipeWire Object

Lua objects that bind a WpPipewireObject contain the following methods:

PipewireObject.iterate_params(self, param_name)

Binds wp_pipewire_object_enum_params_sync()

Parameters:
  • self -- the proxy

  • param_name (string) -- the PipeWire param name to enumerate, ex "Props", "Route"

Returns:

the available parameters

Return type:

Iterator; the iteration items are Spa Pod objects

PipewireObject.set_param(self, param_name, pod)

Binds wp_pipewire_object_set_param()

Parameters:
  • self -- the proxy

  • param_name (string) -- The PipeWire param name to set, ex "Props", "Route"

  • pod (Pod) -- A Spa Pod object containing the new params

Global Proxy

Lua objects that bind a WpGlobalProxy contain the following methods:

GlobalProxy.request_destroy(self)

Binds wp_global_proxy_request_destroy()

Parameters:

self -- the proxy

PipeWire Node

Lua objects that bind a WpNode contain the following methods:

Node.get_state(self)

Binds wp_node_get_state()

Parameters:

self -- the proxy

Returns:

the current state of the node and an error message, if any

Return type:

string (WpNodeState), string (error message)

Since:

0.4.2

Node.get_n_input_ports(self)

Binds wp_node_get_n_input_ports()

Parameters:

self -- the proxy

Returns:

the current and max numbers of input ports on the node

Return type:

integer (current), integer (max)

Since:

0.4.2

Node.get_n_output_ports(self)

Binds wp_node_get_n_output_ports()

Parameters:

self -- the proxy

Returns:

the current and max numbers of output ports on the node

Return type:

integer (current), integer (max)

Since:

0.4.2

Node.get_n_ports(self)

Binds wp_node_get_n_ports()

Parameters:

self -- the proxy

Returns:

the number of ports on the node

Since:

0.4.2

Node.iterate_ports(self, interest)

Binds wp_node_iterate_ports()

Parameters:
  • self -- the proxy

  • interest (Interest or nil or none) -- an interest to filter objects

Returns:

all the ports of this node that that match the interest

Return type:

Iterator; the iteration items are of type WpPort

Since:

0.4.2

Node.lookup_port(self, interest)

Binds wp_node_lookup_port()

Parameters:
  • self -- the proxy

  • interest (Interest or nil or none) -- the interest to use for the lookup

Returns:

the first port of this node that matches the interest

Return type:

WpPort

Since:

0.4.2

Node.send_command(self, command)

Binds wp_node_send_command()

Parameters:
  • self -- the proxy

  • command (string) -- the command to send to the node (ex "Suspend")

PipeWire Port

Lua objects that bind a WpPort contain the following methods:

Port.get_direction(self)

Binds wp_port_get_direction()

Parameters:

self -- the port

Returns:

the direction of the Port

Return type:

string (WpDirection)

Since:

0.4.2

PipeWire Client

Lua objects that bind a WpClient contain the following methods:

Client.update_permissions(self, perms)

Binds wp_client_update_permissions()

Takes a table where the keys are object identifiers and the values are permission strings.

Valid object identifiers are:

  • A number, meaning the bound ID of a proxy

  • The string "any" or the string "all", which sets the default permissions for this client

The permission strings have a chmod-like syntax (ex. "rwx" or "r-xm"), where:

  • "r" means permission to read the object

  • "w" means permission to write data to the object

  • "x" means permission to call methods on the object

  • "m" means permission to set metadata for the object

  • "-" is ignored and can be used to make the string more readable when a permission flag is omitted

Example:

client:update_permissions {
  ["all"] = "r-x",
  [35] = "rwxm",
}
Parameters:
  • self -- the proxy

  • perms (table) -- the permissions to update for this client

Client.attach_permission_manager(self, pm)

Binds wp_client_attach_permission_manager()

Attaches a permission manager to handle permissions for this client automatically. The permission manager will manage per-object permissions based on its configured rules and default permissions.

Parameters:
  • self -- the client

  • pm (WpPermissionManager) -- the permission manager to attach

Client.get_permission_manager(self)

Binds wp_client_get_permission_manager()

Returns the permission manager currently attached to this client, or nil if no permission manager is attached.

Example:

local pm = client:get_permission_manager()
if pm then
  local perms = pm:get_default_permissions()
  -- check permission bits
end
Parameters:

self -- the client

Returns:

the attached permission manager, or nil

Return type:

WpPermissionManager or nil

PipeWire Metadata

Lua objects that bind a WpMetadata contain the following methods:

Metadata.iterate(self, subject)

Binds wp_metadata_new_iterator()

Parameters:
  • self -- the proxy

  • subject (integer) -- the subject id

Returns:

an iterator

Metadata.find(self, subject, key)

Binds wp_metadata_find()

Parameters:
  • self -- the proxy

  • subject (string) -- the subject id

  • key (string) -- the metadata key to find

Returns:

the value for this metadata key, the type of the value

Return type:

string, string

Permission Manager

The PermissionManager object manages per-object permissions for clients. It is created with the global PermissionManager() constructor and configured with default permissions, core permissions, and match rules.

PermissionManager()

Creates a new permission manager.

Returns:

a new permission manager

Return type:

WpPermissionManager

PermissionManager.set_default_permissions(self, perms)

Binds wp_permission_manager_set_default_permissions()

Sets the default permissions applied to all objects that don't match any rule.

Parameters:
  • self -- the permission manager

  • perms -- a permission string (e.g. "rx") or an integer bitmask (e.g. Perm.RX)

PermissionManager.get_default_permissions(self)

Binds wp_permission_manager_get_default_permissions()

Returns the default permissions as an integer bitmask. This can be compared against the Perm constants using bitwise operators.

Example:

local pm = client:get_permission_manager()
local perms = pm:get_default_permissions()
if (perms & Perm.RX) == Perm.RX then
  -- client has at least read + execute
end
Parameters:

self -- the permission manager

Returns:

the default permissions bitmask

Return type:

integer

PermissionManager.set_core_permissions(self, perms)

Binds wp_permission_manager_set_core_permissions()

Sets the permissions applied specifically to the PipeWire core object (ID 0). If not set, the core inherits the default permissions.

Parameters:
  • self -- the permission manager

  • perms -- a permission string or an integer bitmask

PermissionManager.add_rules_match(self, rules)

Binds wp_permission_manager_add_rules_match()

Adds a set of match rules that grant specific permissions to objects matching the given constraints.

Parameters:
  • self -- the permission manager

  • rules (WpSpaJson) -- a JSON array of match rules

Returns:

the match id (can be used with remove_match)

Return type:

integer

PermissionManager.add_interest_match(self, callback, interest)

Binds wp_permission_manager_add_interest_match_closure()

Adds a dynamic match that calls the given callback to determine permissions for objects matching the given interest.

Parameters:
  • self -- the permission manager

  • callback (function) -- a function that returns the permissions for the matched object

  • interest (WpObjectInterest) -- the interest to match

Returns:

the match id

Return type:

integer

PermissionManager.add_interest_match_simple(self, perms, interest)

Binds wp_permission_manager_add_interest_match_simple()

Adds a static match that grants the given permissions to objects matching the given interest.

Parameters:
  • self -- the permission manager

  • perms (integer) -- the permissions bitmask to grant

  • interest (WpObjectInterest) -- the interest to match

Returns:

the match id

Return type:

integer

PermissionManager.remove_match(self, match_id)

Binds wp_permission_manager_remove_match()

Removes a previously added match.

Parameters:
  • self -- the permission manager

  • match_id (integer) -- the match id returned by an add_*_match method

PermissionManager.update_permissions(self)

Binds wp_permission_manager_update_permissions()

Forces a recalculation and update of permissions on all attached clients.

Parameters:

self -- the permission manager