# Template: gaze/tracker/install.sh fills in @UID@ and @GID@ (the Frametop user) and installs # it to /etc/systemd/system. [Unit] Description=Frametop eye-camera frames for our own eye tracker (read-only copies from SteamVR's eyetracking) Documentation=file://@REPO@/gaze/README.md [Service] # Idle (no frames copied, none of the tracker's buffers held) until ft-eyes or # ft-eyes-record touches the want file; see ft-eyegrab.c. ExecStart=/etc/frametop/ft-eyegrab --share /dev/shm/frametop-eyes-cams --owner @UID@:@GID@ --want /dev/shm/frametop-eyes-want Restart=on-failure RestartSec=5 Nice=5 # Root only for what reading another process's buffers needs: CAP_SYS_PTRACE (pidfd_getfd), # CAP_DAC_READ_SEARCH (its /proc/PID/fd), and CAP_CHOWN (the shared file goes to the user). CapabilityBoundingSet=CAP_SYS_PTRACE CAP_DAC_READ_SEARCH CAP_CHOWN AmbientCapabilities= NoNewPrivileges=yes ProtectSystem=strict ProtectHome=yes ReadWritePaths=/dev/shm PrivateNetwork=yes RestrictAddressFamilies=AF_UNIX ProtectKernelModules=yes ProtectKernelTunables=yes ProtectControlGroups=yes ProtectClock=yes ProtectHostname=yes RestrictNamespaces=yes RestrictRealtime=yes LockPersonality=yes MemoryDenyWriteExecute=yes SystemCallArchitectures=native [Install] WantedBy=multi-user.target