dyegoaurelio / simple-wireplumber-gui

A simple GTK4 GUI for PipeWire
GNU General Public License v3.0
48 stars 3 forks source link

Does not work with system-wide pipewire #8

Open quantenzitrone opened 3 months ago

quantenzitrone commented 3 months ago

I have pipewire and wireplumber running as a system-wide systemd service and when trying out this application i get: Error: "failed to connect: Host is down".

To test out if it really is the system-wideness, i stopped my system-wide pipewire and wireplumber and ran them both in a terminal: pipewire& wireplumber simple-wireplumber-gui worked, so pipewire running as system service is definitely the reason.

Another oddity about my setup: Although pipewire is running as a system service, i set it up to run as my local user to mitigate some of the downsides of pipewire running as a system service, but I don't think that influences this much.

dyegoaurelio commented 3 months ago

Currently the app fetches pipewire data by running the pw-cli list-objects command here

https://github.com/dyegoaurelio/simple-wireplumber-gui/blob/d023598339f0ec7ad63ea1a24d304b6e9069b9f1/src/pipewire.py#L54-L56

since pipewire is not accessible because the app doesn't have root permissions, this won't work

I'm not aware of another way to get this information that would work in this context

quantenzitrone commented 3 months ago

pw-cli list-objects works correctly on my system:

at least this is the output, which includes HDA INTEL PCH the main audio sink on my laptop

    id 0, type PipeWire:Interface:Core/4
        object.serial = "0"
        core.name = "pipewire-0"
    id 1, type PipeWire:Interface:Module/3
        object.serial = "1"
        module.name = "libpipewire-module-rt"
    id 2, type PipeWire:Interface:Module/3
        object.serial = "2"
        module.name = "libpipewire-module-protocol-native"
    id 3, type PipeWire:Interface:Module/3
        object.serial = "3"
        module.name = "libpipewire-module-profiler"
    id 4, type PipeWire:Interface:Profiler/3
        object.serial = "4"
    id 5, type PipeWire:Interface:Module/3
        object.serial = "5"
        module.name = "libpipewire-module-metadata"
    id 6, type PipeWire:Interface:Factory/3
        object.serial = "6"
        module.id = "5"
        factory.name = "metadata"
        factory.type.name = "PipeWire:Interface:Metadata"
        factory.type.version = "3"
    id 7, type PipeWire:Interface:Module/3
        object.serial = "7"
        module.name = "libpipewire-module-spa-device-factory"
    id 8, type PipeWire:Interface:Factory/3
        object.serial = "8"
        module.id = "7"
        factory.name = "spa-device-factory"
        factory.type.name = "PipeWire:Interface:Device"
        factory.type.version = "3"
    id 9, type PipeWire:Interface:Module/3
        object.serial = "9"
        module.name = "libpipewire-module-spa-node-factory"
    id 10, type PipeWire:Interface:Factory/3
        object.serial = "10"
        module.id = "9"
        factory.name = "spa-node-factory"
        factory.type.name = "PipeWire:Interface:Node"
        factory.type.version = "3"
    id 11, type PipeWire:Interface:Module/3
        object.serial = "11"
        module.name = "libpipewire-module-client-node"
    id 12, type PipeWire:Interface:Factory/3
        object.serial = "12"
        module.id = "11"
        factory.name = "client-node"
        factory.type.name = "PipeWire:Interface:ClientNode"
        factory.type.version = "5"
    id 13, type PipeWire:Interface:Module/3
        object.serial = "13"
        module.name = "libpipewire-module-client-device"
    id 14, type PipeWire:Interface:Factory/3
        object.serial = "14"
        module.id = "13"
        factory.name = "client-device"
        factory.type.name = "Spa:Pointer:Interface:Device"
        factory.type.version = "0"
    id 15, type PipeWire:Interface:Module/3
        object.serial = "16"
        module.name = "libpipewire-module-access"
    id 16, type PipeWire:Interface:Module/3
        object.serial = "17"
        module.name = "libpipewire-module-adapter"
    id 17, type PipeWire:Interface:Factory/3
        object.serial = "18"
        module.id = "16"
        factory.name = "adapter"
        factory.type.name = "PipeWire:Interface:Node"
        factory.type.version = "3"
    id 18, type PipeWire:Interface:Module/3
        object.serial = "19"
        module.name = "libpipewire-module-link-factory"
    id 19, type PipeWire:Interface:Factory/3
        object.serial = "20"
        module.id = "18"
        factory.name = "link-factory"
        factory.type.name = "PipeWire:Interface:Link"
        factory.type.version = "3"
    id 20, type PipeWire:Interface:Module/3
        object.serial = "21"
        module.name = "libpipewire-module-session-manager"
    id 21, type PipeWire:Interface:Factory/3
        object.serial = "22"
        module.id = "20"
        factory.name = "client-endpoint"
        factory.type.name = "PipeWire:Interface:ClientEndpoint"
        factory.type.version = "0"
    id 22, type PipeWire:Interface:Factory/3
        object.serial = "23"
        module.id = "20"
        factory.name = "client-session"
        factory.type.name = "PipeWire:Interface:ClientSession"
        factory.type.version = "0"
    id 23, type PipeWire:Interface:Factory/3
        object.serial = "24"
        module.id = "20"
        factory.name = "session"
        factory.type.name = "PipeWire:Interface:Session"
        factory.type.version = "0"
    id 24, type PipeWire:Interface:Factory/3
        object.serial = "25"
        module.id = "20"
        factory.name = "endpoint"
        factory.type.name = "PipeWire:Interface:Endpoint"
        factory.type.version = "0"
    id 25, type PipeWire:Interface:Factory/3
        object.serial = "26"
        module.id = "20"
        factory.name = "endpoint-stream"
        factory.type.name = "PipeWire:Interface:EndpointStream"
        factory.type.version = "0"
    id 26, type PipeWire:Interface:Factory/3
        object.serial = "27"
        module.id = "20"
        factory.name = "endpoint-link"
        factory.type.name = "PipeWire:Interface:EndpointLink"
        factory.type.version = "0"
    id 27, type PipeWire:Interface:Node/3
        object.serial = "30"
        factory.id = "10"
        priority.driver = "20000"
        node.name = "Dummy-Driver"
    id 28, type PipeWire:Interface:Node/3
        object.serial = "31"
        factory.id = "10"
        priority.driver = "19000"
        node.name = "Freewheel-Driver"
    id 29, type PipeWire:Interface:Metadata/3
        object.serial = "32"
        metadata.name = "settings"
    id 30, type PipeWire:Interface:Client/3
        object.serial = "33"
        module.id = "2"
        pipewire.protocol = "protocol-native"
        pipewire.sec.pid = "1850"
        pipewire.sec.uid = "1000"
        pipewire.sec.gid = "100"
        pipewire.sec.label = "kernel"
        pipewire.sec.socket = "pipewire-0"
        pipewire.access = "unrestricted"
        application.name = "pipewire"
    id 31, type PipeWire:Interface:Client/3
        object.serial = "34"
        module.id = "2"
        pipewire.protocol = "protocol-native"
        pipewire.sec.pid = "1871"
        pipewire.sec.uid = "1000"
        pipewire.sec.gid = "100"
        pipewire.sec.label = "kernel"
        pipewire.sec.socket = "pipewire-0-manager"
        pipewire.access = "unrestricted"
        application.name = "WirePlumber"
    id 32, type PipeWire:Interface:Client/3
        object.serial = "35"
        module.id = "2"
        pipewire.protocol = "protocol-native"
        pipewire.sec.pid = "1850"
        pipewire.sec.uid = "1000"
        pipewire.sec.gid = "100"
        pipewire.sec.label = "kernel"
        pipewire.sec.socket = "pipewire-0"
        pipewire.access = "unrestricted"
        application.name = "i3status-rs_context"
    id 33, type PipeWire:Interface:Node/3
        object.serial = "62"
        factory.id = "13"
        client.id = "45"
        node.description = "BLE MIDI 1"
        node.name = "bluez_midi.server"
        media.class = "Midi/Bridge"
    id 34, type PipeWire:Interface:Metadata/3
        metadata.name = "schema-sm-settings"
        factory.id = "6"
        module.id = "5"
        client.id = "31"
        object.serial = "37"
    id 35, type PipeWire:Interface:Metadata/3
        metadata.name = "persistent-sm-settings"
        factory.id = "6"
        module.id = "5"
        client.id = "31"
        object.serial = "38"
    id 36, type PipeWire:Interface:Metadata/3
        metadata.name = "sm-settings"
        factory.id = "6"
        module.id = "5"
        client.id = "31"
        object.serial = "39"
    id 37, type PipeWire:Interface:Metadata/3
        metadata.name = "sm-objects"
        factory.id = "6"
        module.id = "5"
        client.id = "31"
        object.serial = "40"
    id 38, type PipeWire:Interface:Metadata/3
        metadata.name = "default"
        factory.id = "6"
        module.id = "5"
        client.id = "31"
        object.serial = "41"
    id 39, type PipeWire:Interface:Metadata/3
        metadata.name = "filters"
        factory.id = "6"
        module.id = "5"
        client.id = "31"
        object.serial = "42"
    id 40, type PipeWire:Interface:Metadata/3
        metadata.name = "route-settings"
        factory.id = "6"
        module.id = "5"
        client.id = "31"
        object.serial = "43"
    id 41, type PipeWire:Interface:Device/3
        object.serial = "66"
        factory.id = "14"
        client.id = "45"
        device.api = "v4l2"
        device.description = "HP Wide Vision HD Camera"
        device.name = "v4l2_device.pci-0000_00_14.0-usb-0_4_1.0"
        media.class = "Video/Device"
    id 42, type PipeWire:Interface:Port/3
        object.serial = "64"
        object.path = "bluez_midi.server:output_0"
        format.dsp = "8 bit raw midi"
        node.id = "33"
        port.id = "0"
        port.name = "out"
        port.direction = "out"
        port.physical = "true"
        port.terminal = "true"
        port.alias = "out"
    id 43, type PipeWire:Interface:Device/3
        object.serial = "65"
        factory.id = "14"
        client.id = "45"
        device.api = "v4l2"
        device.description = "HP Wide Vision HD Camera"
        device.name = "v4l2_device.pci-0000_00_14.0-usb-0_4_1.0"
        media.class = "Video/Device"
    id 44, type PipeWire:Interface:Port/3
        object.serial = "63"
        object.path = "bluez_midi.server:input_0"
        format.dsp = "8 bit raw midi"
        node.id = "33"
        port.id = "0"
        port.name = "in"
        port.direction = "in"
        port.physical = "true"
        port.terminal = "true"
        port.alias = "in"
    id 45, type PipeWire:Interface:Client/3
        object.serial = "48"
        module.id = "2"
        pipewire.protocol = "protocol-native"
        pipewire.sec.pid = "1871"
        pipewire.sec.uid = "1000"
        pipewire.sec.gid = "100"
        pipewire.sec.label = "kernel"
        pipewire.sec.socket = "pipewire-0-manager"
        pipewire.access = "unrestricted"
        application.name = "WirePlumber [export]"
    id 46, type PipeWire:Interface:Client/3
        object.serial = "49"
        module.id = "2"
        pipewire.protocol = "protocol-native"
        pipewire.sec.pid = "1869"
        pipewire.sec.uid = "1000"
        pipewire.sec.gid = "100"
        pipewire.sec.label = "kernel"
        pipewire.sec.socket = "pipewire-0"
        pipewire.access = "unrestricted"
        application.name = ".xdg-desktop-portal-wrapped"
    id 47, type PipeWire:Interface:Client/3
        object.serial = "50"
        module.id = "2"
        pipewire.protocol = "protocol-native"
        pipewire.sec.pid = "1980"
        pipewire.sec.uid = "1000"
        pipewire.sec.gid = "100"
        pipewire.sec.label = "kernel"
        pipewire.sec.socket = "pipewire-0"
        pipewire.access = "unrestricted"
        application.name = ".xdg-desktop-portal-wlr-wrapped"
    id 48, type PipeWire:Interface:Device/3
        object.serial = "51"
        factory.id = "14"
        client.id = "45"
        device.api = "alsa"
        device.description = "GP107GL High Definition Audio Controller"
        device.name = "alsa_card.pci-0000_01_00.1"
        device.nick = "HDA NVidia"
        media.class = "Audio/Device"
    id 49, type PipeWire:Interface:Device/3
        object.serial = "52"
        factory.id = "14"
        client.id = "45"
        device.api = "alsa"
        device.description = "Built-in Audio"
        device.name = "alsa_card.pci-0000_00_1f.3"
        device.nick = "HDA Intel PCH"
        media.class = "Audio/Device"
    id 50, type PipeWire:Interface:Node/3
        object.serial = "53"
        factory.id = "10"
        client.id = "45"
        priority.session = "100"
        priority.driver = "1"
        node.name = "Midi-Bridge"
        media.class = "Midi/Bridge"
    id 51, type PipeWire:Interface:Port/3
        object.serial = "54"
        object.path = "alsa:seq:default:client_14:playback_0"
        format.dsp = "8 bit raw midi"
        node.id = "50"
        port.id = "0"
        port.name = "Midi Through:(playback_0) Midi Through Port-0"
        port.direction = "in"
        port.physical = "true"
        port.terminal = "true"
        port.alias = "Midi Through:Midi Through Port-0"
    id 52, type PipeWire:Interface:Port/3
        object.serial = "55"
        object.path = "alsa:seq:default:client_14:capture_0"
        format.dsp = "8 bit raw midi"
        node.id = "50"
        port.id = "0"
        port.name = "Midi Through:(capture_0) Midi Through Port-0"
        port.direction = "out"
        port.physical = "true"
        port.terminal = "true"
        port.alias = "Midi Through:Midi Through Port-0"
    id 53, type PipeWire:Interface:Port/3
        object.serial = "70"
        object.path = "alsa:pcm:0:front:0:playback:playback_0"
        format.dsp = "32 bit float mono audio"
        node.id = "57"
        audio.channel = "FL"
        port.id = "0"
        port.name = "playback_FL"
        port.direction = "in"
        port.physical = "true"
        port.terminal = "true"
        port.alias = "ALC295 Analog:playback_FL"
    id 54, type PipeWire:Interface:Port/3
        object.serial = "69"
        object.path = "v4l2:/dev/video0:capture_0"
        node.id = "55"
        port.id = "0"
        port.name = "capture_1"
        port.direction = "out"
        port.physical = "true"
        port.terminal = "true"
        port.alias = "HP Wide Vision HD Camera:capture_1"
    id 55, type PipeWire:Interface:Node/3
        object.serial = "68"
        object.path = "v4l2:/dev/video0"
        factory.id = "10"
        client.id = "45"
        device.id = "43"
        priority.session = "1000"
        node.description = "HP Wide Vision HD Camera (V4L2)"
        node.name = "v4l2_input.pci-0000_00_14.0-usb-0_4_1.0"
        node.nick = "HP Wide Vision HD Camera"
        media.class = "Video/Source"
        media.role = "Camera"
    id 56, type PipeWire:Interface:Device/3
        object.serial = "67"
        factory.id = "14"
        client.id = "45"
        device.api = "libcamera"
        device.description = "Unknown device"
        device.name = "libcamera_device.0"
        media.class = "Video/Device"
    id 57, type PipeWire:Interface:Node/3
        object.serial = "60"
        object.path = "alsa:pcm:0:front:0:playback"
        factory.id = "17"
        client.id = "45"
        device.id = "49"
        priority.session = "1009"
        priority.driver = "1009"
        node.description = "Built-in Audio Analog Stereo"
        node.name = "alsa_output.pci-0000_00_1f.3.analog-stereo"
        node.nick = "ALC295 Analog"
        media.class = "Audio/Sink"
    id 58, type PipeWire:Interface:Node/3
        object.serial = "61"
        object.path = "alsa:pcm:0:front:0:capture"
        factory.id = "17"
        client.id = "45"
        device.id = "49"
        priority.session = "2009"
        priority.driver = "2009"
        node.description = "Built-in Audio Analog Stereo"
        node.name = "alsa_input.pci-0000_00_1f.3.analog-stereo"
        node.nick = "ALC295 Analog"
        media.class = "Audio/Source"
    id 59, type PipeWire:Interface:Port/3
        object.serial = "71"
        object.path = "alsa:pcm:0:front:0:playback:monitor_0"
        format.dsp = "32 bit float mono audio"
        node.id = "57"
        audio.channel = "FL"
        port.id = "0"
        port.name = "monitor_FL"
        port.direction = "out"
        port.monitor = "true"
        port.alias = "ALC295 Analog:monitor_FL"
    id 60, type PipeWire:Interface:Port/3
        object.serial = "72"
        object.path = "alsa:pcm:0:front:0:playback:playback_1"
        format.dsp = "32 bit float mono audio"
        node.id = "57"
        audio.channel = "FR"
        port.id = "1"
        port.name = "playback_FR"
        port.direction = "in"
        port.physical = "true"
        port.terminal = "true"
        port.alias = "ALC295 Analog:playback_FR"
    id 61, type PipeWire:Interface:Port/3
        object.serial = "73"
        object.path = "alsa:pcm:0:front:0:playback:monitor_1"
        format.dsp = "32 bit float mono audio"
        node.id = "57"
        audio.channel = "FR"
        port.id = "1"
        port.name = "monitor_FR"
        port.direction = "out"
        port.monitor = "true"
        port.alias = "ALC295 Analog:monitor_FR"
    id 62, type PipeWire:Interface:Port/3
        object.serial = "74"
        object.path = "alsa:pcm:0:front:0:capture:capture_0"
        format.dsp = "32 bit float mono audio"
        node.id = "58"
        audio.channel = "FL"
        port.id = "0"
        port.name = "capture_FL"
        port.direction = "out"
        port.physical = "true"
        port.terminal = "true"
        port.alias = "ALC295 Analog:capture_FL"
    id 63, type PipeWire:Interface:Port/3
        object.serial = "75"
        object.path = "alsa:pcm:0:front:0:capture:capture_1"
        format.dsp = "32 bit float mono audio"
        node.id = "58"
        audio.channel = "FR"
        port.id = "1"
        port.name = "capture_FR"
        port.direction = "out"
        port.physical = "true"
        port.terminal = "true"
        port.alias = "ALC295 Analog:capture_FR"
    id 64, type PipeWire:Interface:Node/3
        object.serial = "76"
        object.path = "libcamera:\_SB_.PCI0.XHC_.RHUB.HS04-4:1.0-0bda:58eb"
        factory.id = "10"
        client.id = "45"
        device.id = "56"
        priority.session = "800"
        node.description = "Built-in Front Camera"
        node.name = "libcamera_input.__SB_.PCI0.XHC_.RHUB.HS04-4_1.0-0bda_58eb"
        node.nick = "HP Wide Vision HD Camera  HP Wi"
        media.class = "Video/Source"
        media.role = "Camera"
    id 65, type PipeWire:Interface:Port/3
        object.serial = "77"
        object.path = "libcamera:\_SB_.PCI0.XHC_.RHUB.HS04-4:1.0-0bda:58eb:capture_0"
        node.id = "64"
        port.id = "0"
        port.name = "capture_1"
        port.direction = "out"
        port.physical = "true"
        port.terminal = "true"
        port.alias = "HP Wide Vision HD Camera  HP Wi:capture_1"
    id 66, type PipeWire:Interface:Client/3
        object.serial = "78"
        module.id = "2"
        pipewire.protocol = "protocol-native"
        pipewire.sec.pid = "1850"
        pipewire.sec.uid = "1000"
        pipewire.sec.gid = "100"
        pipewire.sec.label = "kernel"
        pipewire.sec.socket = "pipewire-0"
        pipewire.access = "unrestricted"
        application.name = "i3status-rs_context"
    id 67, type PipeWire:Interface:Client/3
        object.serial = "80"
        module.id = "2"
        pipewire.protocol = "protocol-native"
        pipewire.sec.pid = "251578"
        pipewire.sec.uid = "1000"
        pipewire.sec.gid = "100"
        pipewire.sec.label = "kernel"
        pipewire.sec.socket = "pipewire-0"
        pipewire.access = "unrestricted"
        application.name = "pw-cli"