State query command has been moved to main where it belongs, "system" information are now fetched in app.New and stored in *App with accessors for relevant values. Exit (cleanup-related) functions are separated into its dedicated "final" package. Signed-off-by: Ophestra Umiker <cat@ophivana.moe>
		
			
				
	
	
		
			37 lines
		
	
	
		
			994 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			994 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package app
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"git.ophivana.moe/cat/fortify/internal/final"
 | |
| 	"os"
 | |
| 	"path"
 | |
| 
 | |
| 	"git.ophivana.moe/cat/fortify/internal/acl"
 | |
| 	"git.ophivana.moe/cat/fortify/internal/state"
 | |
| 	"git.ophivana.moe/cat/fortify/internal/verbose"
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	// https://manpages.debian.org/experimental/libwayland-doc/wl_display_connect.3.en.html
 | |
| 	waylandDisplay = "WAYLAND_DISPLAY"
 | |
| )
 | |
| 
 | |
| func (a *App) ShareWayland() {
 | |
| 	a.setEnablement(state.EnableWayland)
 | |
| 
 | |
| 	// ensure Wayland socket ACL (e.g. `/run/user/%d/wayland-%d`)
 | |
| 	if w, ok := os.LookupEnv(waylandDisplay); !ok {
 | |
| 		final.Fatal("Wayland: WAYLAND_DISPLAY not set")
 | |
| 	} else {
 | |
| 		// add environment variable for new process
 | |
| 		wp := path.Join(a.runtimePath, w)
 | |
| 		a.AppendEnv(waylandDisplay, wp)
 | |
| 		if err := acl.UpdatePerm(wp, a.UID(), acl.Read, acl.Write, acl.Execute); err != nil {
 | |
| 			final.Fatal(fmt.Sprintf("Error preparing Wayland '%s':", w), err)
 | |
| 		} else {
 | |
| 			final.RegisterRevertPath(wp)
 | |
| 		}
 | |
| 		verbose.Printf("Wayland socket '%s' configured\n", w)
 | |
| 	}
 | |
| }
 |