diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-12-15 12:35:43 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-12-15 12:38:39 +0900 |
| commit | 2e806601693e0262641386ce5430d7e8d84b2a77 (patch) | |
| tree | bf8cf3cfbe0d3e8e01524a32ef5ab96ac66de5b5 /internal/outcome/sppipewire.go | |
| parent | d0a3c6a2f3ac4da3921fa525cf1ee5ea7d68eb1c (diff) | |
internal/outcome: look up pipewire-pulse path
This is for setting up the pipewire-pulse container in shim, for #29.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/outcome/sppipewire.go')
| -rw-r--r-- | internal/outcome/sppipewire.go | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/internal/outcome/sppipewire.go b/internal/outcome/sppipewire.go index b9359f7e..fd99d514 100644 --- a/internal/outcome/sppipewire.go +++ b/internal/outcome/sppipewire.go @@ -3,20 +3,33 @@ package outcome import ( "encoding/gob" + "hakurei.app/container/check" "hakurei.app/hst" "hakurei.app/internal/pipewire" ) -func init() { gob.Register(spPipeWireOp{}) } +const pipewirePulseName = "pipewire-pulse" + +func init() { gob.Register(new(spPipeWireOp)) } // spPipeWireOp exports the PipeWire server to the container via SecurityContext. // Runs after spRuntimeOp. -type spPipeWireOp struct{} +type spPipeWireOp struct { + // Path to pipewire-pulse server. Populated during toSystem if DirectPipeWire is false. + CompatServerPath *check.Absolute +} -func (s spPipeWireOp) toSystem(state *outcomeStateSys) error { +func (s *spPipeWireOp) toSystem(state *outcomeStateSys) error { if state.et&hst.EPipeWire == 0 { return errNotEnabled } + if !state.directPipeWire { + if n, err := state.k.lookPath(pipewirePulseName); err != nil { + return &hst.AppError{Step: "look up " + pipewirePulseName, Err: err} + } else if s.CompatServerPath, err = check.NewAbs(n); err != nil { + return err + } + } appId := state.appId if appId == "" { @@ -27,10 +40,10 @@ func (s spPipeWireOp) toSystem(state *outcomeStateSys) error { return nil } -func (s spPipeWireOp) toContainer(state *outcomeStateParams) error { - innerPath := state.runtimeDir.Append(pipewire.PW_DEFAULT_REMOTE) - state.env[pipewire.Remote] = innerPath.String() - state.params.Bind(state.instancePath().Append("pipewire"), innerPath, 0) +func (s *spPipeWireOp) toContainer(state *outcomeStateParams) error { + innerPath := state.runtimeDir.Append(pipewire.PW_DEFAULT_REMOTE) + state.env[pipewire.Remote] = innerPath.String() + state.params.Bind(state.instancePath().Append("pipewire"), innerPath, 0) return nil } |
