Wim Taymans
579e8a4ea6
json: allocate one extra byte for the \0
2021-01-19 16:56:55 +01:00
Wim Taymans
9a03f8769e
pw-cli: handle unquoted strings
...
Use parse_string for everything else to use it as a string value.
Make it possible to use short name for the param.
so now you can do:
pw-cli set-param 55 Props '{ channelVolumes: [ 0.3, 0.3 ], channelMap: [ FR,FL ] }'
2021-01-08 12:23:02 +01:00
Wim Taymans
1e9b152bb5
spa: make an extra level for arrays
...
Make a level with type info for the array elements.
2020-12-01 13:30:14 +01:00
Wim Taymans
95718792c4
pw-cli: implement set_param
...
You can do something like this to set some params:
pw-cli set-param 46 13 '{ "index": 5,
"props": { "mute": false,
"channelMap": [ "FL", "LFE" ]
},
"direction": "Output"
}'
2020-11-30 13:31:46 +01:00
Wim Taymans
b3aa346063
handle core error better
...
Use the PW_ID_CORE constant
Quit the mainloop when server disconnected in the tools
See #395
2020-11-20 12:29:51 +01:00
Wim Taymans
1570e62635
remove hooks from objects
...
Remove the hooks we installed on objects in the destroy/free event
or before calling _destroy. This is not really needed but it is
a nice thing to do because it calls the hook removed callbacks.
2020-11-06 15:53:32 +01:00
Wim Taymans
91d4806611
permission: add some helpers
...
Add PW_PERM_ALL as a shortcut for all permissions
Add PW_PERMISSION_FORMAT and PW_PERMISSION_ARGS to nicely format
permissions.
2020-07-30 16:26:29 +02:00
Wim Taymans
3eb37320c9
pw-cli: improve permission debug
2020-07-16 17:46:47 +02:00
Wim Taymans
9caccb6125
pw-cli: quit when we quit
2020-07-16 12:49:17 +02:00
Wim Taymans
30571d4706
tools: fix some leaks
2020-06-04 12:35:16 +02:00
Wim Taymans
60742d7542
pw-cli: allocate nodes ids of the right size
2020-05-20 15:24:25 +02:00
Wim Taymans
d31c057b42
Remove some useless checks
2020-05-20 15:24:25 +02:00
Wim Taymans
ce98162ed2
Make sure we don't read too much
2020-05-20 15:24:25 +02:00
Wim Taymans
d68e7ed58a
tools: handle connection error
2020-04-22 11:28:32 +02:00
Wim Taymans
7927a66fdd
tools: improve error reporting
2020-04-04 20:23:42 +02:00
Wim Taymans
b87c0a9270
clean up options
...
make sure we can use -v for verbose mode
2020-04-02 14:34:02 +02:00
Gleb Popov
b552863ec9
Don't include alloca.h on FreeBSD.
2020-03-31 12:16:45 +02:00
Wim Taymans
413bda908a
pw-cli: continue after parsed options
2020-03-25 18:00:50 +01:00
Wim Taymans
c292a6d54e
pw-cli: add non-interactive mode
...
You can now pass a command to pw-cli and it will execute immediately
and exit.
Fixes #195
2020-03-25 11:17:02 +01:00
Wim Taymans
646088b90c
tools: add getopt argument parsing
...
Add some help, version, remote options for tools
Add option for output filename in pw-profiler
Add option to start pw-cli as daemon or not, make it connect to the
default PipeWire instance by default (instead of local instance)
2020-03-24 16:36:48 +01:00
Wim Taymans
6700e332f9
Revert "pw-cli: Collect and display parameters from global symbols"
...
This reverts commit 3b53a6e049 .
2020-03-06 16:33:50 +01:00
Wim Taymans
524f9fd96d
Revert "Implement JSON/YAML command for graph tree traversal"
...
This reverts commit 7ead270265 .
2020-03-06 16:33:36 +01:00
Wim Taymans
8644e80304
Revert "Fix change_mask string generation"
...
This reverts commit b445bdea27 .
2020-03-06 16:33:14 +01:00
Wim Taymans
b7f952e02b
Revert "Fix printf attribute compilation errors"
...
This reverts commit 4175191d19 .
2020-03-06 16:30:32 +01:00
Wim Taymans
d880db3933
Revert "pw-cli: use core object to map id to proxy"
...
This reverts commit 918acd61ef .
2020-03-06 16:30:18 +01:00
Wim Taymans
e9884fcfb5
pw-*: Use user data to track param changes
...
Use the new param_info user field to track individual param
changes and only notify thos that changed.
2020-03-06 15:41:02 +01:00
Wim Taymans
c4b2be2aad
use true and false for boolean properties
...
So that it's easier to convert them to booleans in introspection
code later.
2020-03-03 18:17:46 +01:00
Pantelis Antoniou
b445bdea27
Fix change_mask string generation
...
The change_mask string generation was buggy and confusing.
Fix it with something more usable.
Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
2020-02-21 15:14:31 +01:00
Wim Taymans
918acd61ef
pw-cli: use core object to map id to proxy
...
We can use the core object to get a proxy for a given id. From there
we can find the user data and the associated global if any.
2020-02-21 11:47:34 +01:00
Pantelis Antoniou
4175191d19
Fix printf attribute compilation errors
...
Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
2020-02-21 11:30:49 +01:00
Pantelis Antoniou
7ead270265
Implement JSON/YAML command for graph tree traversal
...
Implement a single command that allows viewing all information
about a remotes properties/parameters and info variables.
This patch creates a framework for accessing properties using
a simple dotted variable access method or JSON/YAML path expressions.
The root of the tree is a sequence of all globals objects, and
accessing a the first one is simply 0 (or /0 is JSON/YAML path form).
pipewire-0>>graph 0
id: 0
type: PipeWire:Interface:Core
permissions: rwx
version: 3
info:
id: 0
cookie: 1602594817
user_name: panto
host_name: nuc2
version: 0.2.96
name: pipewire-0
change_mask: props
props:
pipewire.core.name: pipewire-0
context.profile.modules: none
pipewire.core.daemon: 1
link.max-buffers: 16
default.clock.rate: 48000
default.clock.quantum: 1024
default.clock.min-quantum: 32
default.clock.max-quantum: 8192
default.video.width: 640
default.video.height: 480
default.video.rate.num: 25
default.video.rate.denom: 1
mem.allow-mlock: true
cpu.max-align: 32
object.id: 0
properties:
pipewire.core.name: pipewire-0
Displaying a nodes information is simply:
pipewire-0>>graph /32
id: 32
type: PipeWire:Interface:Node
permissions: rwx
version: 3
info:
id: 32
max_input_ports: 128
max_output_ports: 0
n_input_ports: 2
n_output_ports: 2
state: suspended
error:
change_mask: "n_input_ports,n_output_ports,state,props,params"
props:
object.path: alsa:pcm:HDMI:3:playback
api.alsa.path: "hw:0,3"
api.alsa.pcm.card: 0
api.alsa.pcm.device: 3
api.alsa.pcm.subdevice: 0
api.alsa.pcm.stream: playback
api.alsa.pcm.id: "HDMI 0"
api.alsa.pcm.name: "HDMI 0"
api.alsa.pcm.subname: "subdevice #0 "
api.alsa.pcm.class: generic
api.alsa.pcm.subclass: generic-mix
api.alsa.pcm.sync-id: 00000000:00000000:00000000:00000000
device.id: 26
factory.name: api.alsa.pcm.sink
priority.master: 696
priority.session: 696
media.class: Audio/Sink
node.name: alsa_card.pci-0000:00:03.0.playback.3.0
node.description: "Built-in Audio (HDMI 0)"
factory.id: 17
client.id: 24
device.api: alsa
node.driver: true
factory.mode: merge
audio.adapt.slave:
library.name: audioconvert/libspa-audioconvert
object.id: 32
params:
EnumFormat:
mediaType: audio
mediaSubtype: raw
format:
default: S32LE
alt0: S32LE
alt1: S16LE
rate:
default: 48000
min: 32000
max: 48000
channels: 2
position:
- FL
- FR
PropInfo:
- id: volume
name: Volume
type:
default: 1.000000
min: 0.000000
max: 10.000000
- id: mute
name: Mute
type:
default: false
alt0: false
alt1: true
- id: channelVolumes
name: "Channel Volumes"
type:
default: 1.000000
min: 0.000000
max: 10.000000
Props:
volume: 1.000000
mute: false
channelVolumes: []
Format: {}
EnumPortConfig:
- direction: Input
mode: dsp
- direction: Output
mode: dsp
- direction: Input
mode: convert
- direction: Output
mode: convert
PortConfig: {}
properties:
object.path: alsa:pcm:HDMI:3:playback
factory.id: 17
client.id: 24
device.id: 26
priority.session: 696
priority.master: 696
node.description: "Built-in Audio (HDMI 0)"
node.name: alsa_card.pci-0000:00:03.0.playback.3.0
media.class: Audio/Sink
To simply display the parameters of the same object:
pipewire-0>>graph 32/info/params
EnumFormat:
mediaType: audio
mediaSubtype: raw
format:
default: S32LE
alt0: S32LE
alt1: S16LE
rate:
default: 48000
min: 32000
max: 48000
channels: 2
position:
- FL
- FR
PropInfo:
- id: volume
name: Volume
type:
default: 1.000000
min: 0.000000
max: 10.000000
- id: mute
name: Mute
type:
default: false
alt0: false
alt1: true
- id: channelVolumes
name: "Channel Volumes"
type:
default: 1.000000
min: 0.000000
max: 10.000000
Props:
volume: 1.000000
mute: false
channelVolumes: []
Format: {}
EnumPortConfig:
- direction: Input
mode: dsp
- direction: Output
mode: dsp
- direction: Input
mode: convert
- direction: Output
mode: convert
PortConfig: {}
The graph command also supports the following options:
-y Select YAML format (this is the default)
-j Select JSON format
-n Display numeric instead of textual IDs
-f Display full type info, i.e. instead of EnumFormat will
display Spa:Enum:ParamId:EnumFormat
Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
2020-02-21 11:30:49 +01:00
Pantelis Antoniou
3b53a6e049
pw-cli: Collect and display parameters from global symbols
...
Until now there was no method to display parameters along with
information of their parent object.
This patchset stores parameter info in the global object so
that it may displayed along with its parent object.
This is a necessary step to be able to display and modify parameters
in a simple form like the following
pipewire-0>> set 12 volume=0.7
pipewire-0>> get 12 volume
0.7
Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
2020-02-21 11:30:49 +01:00
Wim Taymans
ed13cd2ec8
pw-cli: improve help
2020-01-28 13:04:21 +01:00
Wim Taymans
1c6ce1778b
pw-cli: handle NULL when iterating globals
...
It is possible that the global map contains holes and then the
pw_map item has NULL data.
2020-01-28 12:55:01 +01:00
Pantelis Antoniou
e258382bec
pipewire-cli: Introduce an improved object dump method
...
The dump method can dump objects in a manner that is easy
for humans to parse and understand.
For instance a simple command (on a vanilla NUC2):
pipewire-0>>dump -sd Device
23: c="Audio/Device" n="alsa_card.pci-0000:00:03.0" d="Built-in Audio" a="alsa:pcm" p="hw:0" id="HDMI"
nodes:
24: s="suspended" i=2/128 n="api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 0" p="alsa:pcm:hw:0,3:playback"
ports:
31: d="input" n="playback_FL" f="32 bit float mono audio"
32: d="input" n="playback_FR" f="32 bit float mono audio"
25: s="suspended" i=2/128 n="api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 1" p="alsa:pcm:hw:0,7:playback"
ports:
33: d="input" n="playback_FL" f="32 bit float mono audio"
34: d="input" n="playback_FR" f="32 bit float mono audio"
26: s="suspended" i=2/128 n="api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 2" p="alsa:pcm:hw:0,8:playback"
ports:
35: d="input" n="playback_FL" f="32 bit float mono audio"
36: d="input" n="playback_FR" f="32 bit float mono audio"
27: s="suspended" i=2/128 n="api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 3" p="alsa:pcm:hw:0,9:playback"
ports:
37: d="input" n="playback_FL" f="32 bit float mono audio"
38: d="input" n="playback_FR" f="32 bit float mono audio"
43: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 0/Multimedia" p="alsa:pcm:hw:0,3:playback:Multimedia"
ports:
44: d="input" n="in_FL" f="32 bit float mono audio"
45: d="output" n="out_FL" f="32 bit float mono audio"
106: d="output" n="out_FR" f="32 bit float mono audio"
107: d="input" n="in_FR" f="32 bit float mono audio"
46: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 0/Navigation" p="alsa:pcm:hw:0,3:playback:Navigation"
ports:
47: d="input" n="in_FL" f="32 bit float mono audio"
48: d="output" n="out_FL" f="32 bit float mono audio"
108: d="output" n="out_FR" f="32 bit float mono audio"
109: d="input" n="in_FR" f="32 bit float mono audio"
49: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 0/Communication" p="alsa:pcm:hw:0,3:playback:Communication"
ports:
50: d="input" n="in_FL" f="32 bit float mono audio"
51: d="output" n="out_FL" f="32 bit float mono audio"
110: d="output" n="out_FR" f="32 bit float mono audio"
111: d="input" n="in_FR" f="32 bit float mono audio"
52: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 0/Emergency" p="alsa:pcm:hw:0,3:playback:Emergency"
ports:
53: d="input" n="in_FL" f="32 bit float mono audio"
54: d="output" n="out_FL" f="32 bit float mono audio"
112: d="output" n="out_FR" f="32 bit float mono audio"
113: d="input" n="in_FR" f="32 bit float mono audio"
55: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 1/Multimedia" p="alsa:pcm:hw:0,7:playback:Multimedia"
ports:
56: d="input" n="in_FL" f="32 bit float mono audio"
57: d="output" n="out_FL" f="32 bit float mono audio"
114: d="output" n="out_FR" f="32 bit float mono audio"
115: d="input" n="in_FR" f="32 bit float mono audio"
58: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 1/Navigation" p="alsa:pcm:hw:0,7:playback:Navigation"
ports:
59: d="input" n="in_FL" f="32 bit float mono audio"
60: d="output" n="out_FL" f="32 bit float mono audio"
116: d="output" n="out_FR" f="32 bit float mono audio"
117: d="input" n="in_FR" f="32 bit float mono audio"
61: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 1/Communication" p="alsa:pcm:hw:0,7:playback:Communication"
ports:
62: d="input" n="in_FL" f="32 bit float mono audio"
63: d="output" n="out_FL" f="32 bit float mono audio"
118: d="output" n="out_FR" f="32 bit float mono audio"
119: d="input" n="in_FR" f="32 bit float mono audio"
64: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 1/Emergency" p="alsa:pcm:hw:0,7:playback:Emergency"
ports:
65: d="input" n="in_FL" f="32 bit float mono audio"
66: d="output" n="out_FL" f="32 bit float mono audio"
120: d="output" n="out_FR" f="32 bit float mono audio"
121: d="input" n="in_FR" f="32 bit float mono audio"
67: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 2/Multimedia" p="alsa:pcm:hw:0,8:playback:Multimedia"
ports:
68: d="input" n="in_FL" f="32 bit float mono audio"
69: d="output" n="out_FL" f="32 bit float mono audio"
122: d="output" n="out_FR" f="32 bit float mono audio"
123: d="input" n="in_FR" f="32 bit float mono audio"
70: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 2/Navigation" p="alsa:pcm:hw:0,8:playback:Navigation"
ports:
71: d="input" n="in_FL" f="32 bit float mono audio"
72: d="output" n="out_FL" f="32 bit float mono audio"
124: d="output" n="out_FR" f="32 bit float mono audio"
125: d="input" n="in_FR" f="32 bit float mono audio"
73: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 2/Communication" p="alsa:pcm:hw:0,8:playback:Communication"
ports:
74: d="input" n="in_FL" f="32 bit float mono audio"
75: d="output" n="out_FL" f="32 bit float mono audio"
126: d="output" n="out_FR" f="32 bit float mono audio"
127: d="input" n="in_FR" f="32 bit float mono audio"
76: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 2/Emergency" p="alsa:pcm:hw:0,8:playback:Emergency"
ports:
77: d="input" n="in_FL" f="32 bit float mono audio"
78: d="output" n="out_FL" f="32 bit float mono audio"
128: d="output" n="out_FR" f="32 bit float mono audio"
129: d="input" n="in_FR" f="32 bit float mono audio"
79: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 3/Multimedia" p="alsa:pcm:hw:0,9:playback:Multimedia"
ports:
80: d="input" n="in_FL" f="32 bit float mono audio"
81: d="output" n="out_FL" f="32 bit float mono audio"
130: d="output" n="out_FR" f="32 bit float mono audio"
131: d="input" n="in_FR" f="32 bit float mono audio"
82: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 3/Navigation" p="alsa:pcm:hw:0,9:playback:Navigation"
ports:
83: d="input" n="in_FL" f="32 bit float mono audio"
84: d="output" n="out_FL" f="32 bit float mono audio"
132: d="output" n="out_FR" f="32 bit float mono audio"
133: d="input" n="in_FR" f="32 bit float mono audio"
85: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 3/Communication" p="alsa:pcm:hw:0,9:playback:Communication"
ports:
86: d="input" n="in_FL" f="32 bit float mono audio"
87: d="output" n="out_FL" f="32 bit float mono audio"
134: d="output" n="out_FR" f="32 bit float mono audio"
135: d="input" n="in_FR" f="32 bit float mono audio"
88: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 3/Emergency" p="alsa:pcm:hw:0,9:playback:Emergency"
ports:
89: d="input" n="in_FL" f="32 bit float mono audio"
90: d="output" n="out_FL" f="32 bit float mono audio"
136: d="output" n="out_FR" f="32 bit float mono audio"
137: d="input" n="in_FR" f="32 bit float mono audio"
28: c="Audio/Device" n="alsa_card.pci-0000:00:1b.0" d="Built-in Audio" a="alsa:pcm" p="hw:1" id="PCH"
nodes:
29: s="running" i=2/128 n="api.alsa.pcm.sink/alsa_card.pci-0000:00:1b.0/ALC283 Analog" p="alsa:pcm:hw:1,0:playback"
ports:
39: d="input" n="playback_FL" f="32 bit float mono audio"
40: d="input" n="playback_FR" f="32 bit float mono audio"
30: s="suspended" o=2/128 n="api.alsa.pcm.source/alsa_card.pci-0000:00:1b.0/ALC283 Analog" p="alsa:pcm:hw:1,0:capture"
ports:
41: d="output" n="capture_FL" f="32 bit float mono audio"
42: d="output" n="capture_FR" f="32 bit float mono audio"
91: s="running" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:1b.0/ALC283 Analog/Multimedia" p="alsa:pcm:hw:1,0:playback:Multimedia"
ports:
92: d="input" n="in_FL" f="32 bit float mono audio"
93: d="output" n="out_FL" f="32 bit float mono audio"
138: d="output" n="out_FR" f="32 bit float mono audio"
139: d="input" n="in_FR" f="32 bit float mono audio"
94: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:1b.0/ALC283 Analog/Navigation" p="alsa:pcm:hw:1,0:playback:Navigation"
ports:
95: d="input" n="in_FL" f="32 bit float mono audio"
96: d="output" n="out_FL" f="32 bit float mono audio"
140: d="output" n="out_FR" f="32 bit float mono audio"
141: d="input" n="in_FR" f="32 bit float mono audio"
97: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:1b.0/ALC283 Analog/Communication" p="alsa:pcm:hw:1,0:playback:Communication"
ports:
98: d="input" n="in_FL" f="32 bit float mono audio"
99: d="output" n="out_FL" f="32 bit float mono audio"
142: d="output" n="out_FR" f="32 bit float mono audio"
143: d="input" n="in_FR" f="32 bit float mono audio"
100: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:1b.0/ALC283 Analog/Emergency" p="alsa:pcm:hw:1,0:playback:Emergency"
ports:
101: d="input" n="in_FL" f="32 bit float mono audio"
102: d="output" n="out_FL" f="32 bit float mono audio"
144: d="output" n="out_FR" f="32 bit float mono audio"
145: d="input" n="in_FR" f="32 bit float mono audio"
103: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.source/alsa_card.pci-0000:00:1b.0/ALC283 Analog/Capture" p="alsa:pcm:hw:1,0:capture:Capture"
ports:
104: d="input" n="in_FL" f="32 bit float mono audio"
105: d="output" n="out_FL" f="32 bit float mono audio"
146: d="input" n="in_FR" f="32 bit float mono audio"
147: d="output" n="out_FR" f="32 bit float mono audio"
Will dump the devices, while following to dump nodes and ports
of the nodes.
Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
2020-01-28 12:45:24 +01:00
Pantelis Antoniou
193360abe6
pipewire-cli: Immediately bind the object on creation
...
Immediately bind the global object upon creation. This
allows to iterate over them without having to wait for
the bind to be completed asynchronously.
Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
2020-01-28 12:45:21 +01:00
Wim Taymans
c047bab910
rename pipewire tools
...
Use the pw- prefix for all pipewire tools. This makes the
commands shorter but also avoids conflicts with password
and patchwork tools (pwcli is taken, pwconv is maybe we someday
can make).
pipewire-monitor -> pw-mon
pipewire-cli -> pw-cli
pipewire-dot -> pw-dot
pwcat -> pw-cat
2020-01-27 15:42:59 +01:00