aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/outcome/sppipewire.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-12-15 12:35:43 +0900
committerOphestra <cat@gensokyo.uk>2025-12-15 12:38:39 +0900
commit2e806601693e0262641386ce5430d7e8d84b2a77 (patch)
treebf8cf3cfbe0d3e8e01524a32ef5ab96ac66de5b5 /internal/outcome/sppipewire.go
parentd0a3c6a2f3ac4da3921fa525cf1ee5ea7d68eb1c (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.go27
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
}