refactor: rename sysinfo tool to aster-sysinfo (#16)

The sysinfo name was too generic and misleading. This tool provides
sensor values from the system for `asterctl` and is not a generic system
information tool.
This commit is contained in:
Markus Zehnder
2025-08-31 20:58:43 +02:00
committed by GitHub
parent cfe178893f
commit 54f34def2c
18 changed files with 144 additions and 64 deletions
+1 -1
View File
@@ -106,7 +106,7 @@ jobs:
ls -la target/release ls -la target/release
mkdir -p ${GITHUB_WORKSPACE}/${{env.BIN_OUTPUT_PATH }} mkdir -p ${GITHUB_WORKSPACE}/${{env.BIN_OUTPUT_PATH }}
cp target/release/${{ env.APP_NAME }} ${GITHUB_WORKSPACE}/${{ env.BIN_OUTPUT_PATH }} cp target/release/${{ env.APP_NAME }} ${GITHUB_WORKSPACE}/${{ env.BIN_OUTPUT_PATH }}
cp target/release/sysinfo ${GITHUB_WORKSPACE}/${{ env.BIN_OUTPUT_PATH }} cp target/release/aster-sysinfo ${GITHUB_WORKSPACE}/${{ env.BIN_OUTPUT_PATH }}
cp linux/*.service ${GITHUB_WORKSPACE}/${{ env.BIN_OUTPUT_PATH }} cp linux/*.service ${GITHUB_WORKSPACE}/${{ env.BIN_OUTPUT_PATH }}
cp -r cfg ${GITHUB_WORKSPACE}/${{ env.BIN_OUTPUT_PATH }} cp -r cfg ${GITHUB_WORKSPACE}/${{ env.BIN_OUTPUT_PATH }}
echo "VERSION=${{ env.APP_VERSION }}" > ${GITHUB_WORKSPACE}/${{ env.BIN_OUTPUT_PATH }}/version.txt echo "VERSION=${{ env.APP_VERSION }}" > ${GITHUB_WORKSPACE}/${{ env.BIN_OUTPUT_PATH }}/version.txt
+7
View File
@@ -0,0 +1,7 @@
<component name="ProjectDictionaryState">
<dictionary name="project">
<words>
<w>zehnder</w>
</words>
</dictionary>
</component>
+2 -2
View File
@@ -6,10 +6,10 @@
<sourceFolder url="file://$MODULE_DIR$/crates/asterctl-lcd/src" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/crates/asterctl-lcd/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/crates/asterctl/examples" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/crates/asterctl/examples" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/crates/asterctl/src" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/crates/asterctl/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/crates/sysinfo/src" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/crates/aster-sysinfo/src" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/target" /> <excludeFolder url="file://$MODULE_DIR$/target" />
<excludeFolder url="file://$MODULE_DIR$/crates/asterctl-lcd/target" /> <excludeFolder url="file://$MODULE_DIR$/crates/asterctl-lcd/target" />
<excludeFolder url="file://$MODULE_DIR$/crates/sysinfo/target" /> <excludeFolder url="file://$MODULE_DIR$/crates/aster-sysinfo/target" />
</content> </content>
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
</component> </component>
+2 -1
View File
@@ -12,12 +12,13 @@ _Changes in the next release_
### Fixed ### Fixed
- Misplaced text sensors in custom panels ([#11](https://github.com/zehnm/aoostar-rs/issues/11)). - Misplaced text sensors in custom panels ([#11](https://github.com/zehnm/aoostar-rs/issues/11)).
- Wrong start position for circular progress (fan) sensor using a counter-clockwise direction ([#12](https://github.com/zehnm/aoostar-rs/issues/12)). - Wrong start position for circular progress (fan) sensor using a counter-clockwise direction ([#12](https://github.com/zehnm/aoostar-rs/issues/12)).
- sysinfo tool: make sensor file world-readable, create all parent directories. - aster-sysinfo tool: make sensor file world-readable, create all parent directories.
### Added ### Added
- Simple sensor panel with a file-based data source ([#6](https://github.com/zehnm/aoostar-rs/issues/6)). - Simple sensor panel with a file-based data source ([#6](https://github.com/zehnm/aoostar-rs/issues/6)).
- Initial support for fan-, progress-, & pointer-sensors ([#8](https://github.com/zehnm/aoostar-rs/pull/8)). - Initial support for fan-, progress-, & pointer-sensors ([#8](https://github.com/zehnm/aoostar-rs/pull/8)).
- Use [mdBook](https://rust-lang.github.io/mdBook/) for documentation and publish user guide to GitHub pages ([#10](https://github.com/zehnm/aoostar-rs/pull/10)). - Use [mdBook](https://rust-lang.github.io/mdBook/) for documentation and publish user guide to GitHub pages ([#10](https://github.com/zehnm/aoostar-rs/pull/10)).
- Initial `aster-sysinfo` tool for providing sensor values in a text file for `asterctl`.
### Changed ### Changed
- Project structure using a Cargo workspace. - Project structure using a Cargo workspace.
Generated
+30 -33
View File
@@ -130,9 +130,22 @@ version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
[[package]]
name = "aster-sysinfo"
version = "0.2.0"
dependencies = [
"clap",
"env_logger",
"itertools 0.14.0",
"log",
"regex",
"sysinfo",
"tempfile",
]
[[package]] [[package]]
name = "asterctl" name = "asterctl"
version = "0.1.0" version = "0.2.0"
dependencies = [ dependencies = [
"ab_glyph", "ab_glyph",
"anyhow", "anyhow",
@@ -152,7 +165,7 @@ dependencies = [
[[package]] [[package]]
name = "asterctl-lcd" name = "asterctl-lcd"
version = "0.1.0" version = "0.2.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"bytes", "bytes",
@@ -192,9 +205,9 @@ dependencies = [
[[package]] [[package]]
name = "bit_field" name = "bit_field"
version = "0.10.2" version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6"
[[package]] [[package]]
name = "bitflags" name = "bitflags"
@@ -273,9 +286,9 @@ checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9"
[[package]] [[package]]
name = "clap" name = "clap"
version = "4.5.45" version = "4.5.46"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fc0e74a703892159f5ae7d3aac52c8e6c392f5ae5f359c70b5881d60aaac318" checksum = "2c5e4fcf9c21d2e544ca1ee9d8552de13019a42aa7dbf32747fa7aaf1df76e57"
dependencies = [ dependencies = [
"clap_builder", "clap_builder",
"clap_derive", "clap_derive",
@@ -283,9 +296,9 @@ dependencies = [
[[package]] [[package]]
name = "clap_builder" name = "clap_builder"
version = "4.5.44" version = "4.5.46"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8" checksum = "fecb53a0e6fcfb055f686001bc2e2592fa527efaf38dbe81a6a9563562e57d41"
dependencies = [ dependencies = [
"anstream", "anstream",
"anstyle", "anstyle",
@@ -558,7 +571,7 @@ dependencies = [
"cfg-if", "cfg-if",
"libc", "libc",
"r-efi", "r-efi",
"wasi 0.14.2+wasi-0.2.4", "wasi 0.14.3+wasi-0.2.4",
] ]
[[package]] [[package]]
@@ -624,9 +637,9 @@ dependencies = [
[[package]] [[package]]
name = "image-webp" name = "image-webp"
version = "0.2.3" version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6970fe7a5300b4b42e62c52efa0187540a5bef546c60edaf554ef595d2e6f0b" checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3"
dependencies = [ dependencies = [
"byteorder-lite", "byteorder-lite",
"quick-error", "quick-error",
@@ -1656,19 +1669,6 @@ dependencies = [
"unicode-ident", "unicode-ident",
] ]
[[package]]
name = "sysinfo"
version = "0.1.0"
dependencies = [
"clap",
"env_logger",
"itertools 0.14.0",
"log",
"regex",
"sysinfo 0.37.0",
"tempfile",
]
[[package]] [[package]]
name = "sysinfo" name = "sysinfo"
version = "0.37.0" version = "0.37.0"
@@ -1868,11 +1868,11 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
[[package]] [[package]]
name = "wasi" name = "wasi"
version = "0.14.2+wasi-0.2.4" version = "0.14.3+wasi-0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" checksum = "6a51ae83037bdd272a9e28ce236db8c07016dd0d50c27038b3f407533c030c95"
dependencies = [ dependencies = [
"wit-bindgen-rt", "wit-bindgen",
] ]
[[package]] [[package]]
@@ -2248,13 +2248,10 @@ dependencies = [
] ]
[[package]] [[package]]
name = "wit-bindgen-rt" name = "wit-bindgen"
version = "0.39.0" version = "0.45.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" checksum = "052283831dbae3d879dc7f51f3d92703a316ca49f91540417d38591826127814"
dependencies = [
"bitflags 2.9.3",
]
[[package]] [[package]]
name = "zerocopy" name = "zerocopy"
@@ -1,6 +1,6 @@
[package] [package]
name = "sysinfo" name = "aster-sysinfo"
version = "0.1.0" version = "0.2.0"
description = "System sensor provider for asterctl" description = "System sensor provider for asterctl"
rust-version.workspace = true rust-version.workspace = true
@@ -37,11 +37,11 @@ Options:
Single test run with printing all sensors in the console: Single test run with printing all sensors in the console:
```shell ```shell
sysinfo --console aster-sysinfo --console
``` ```
Normal mode providing sensor values for `asterctl` in `/tmp/sensors/sysinfo.txt` every 3 seconds: Normal mode providing sensor values for `asterctl` in `/tmp/sensors/sysinfo.txt` every 3 seconds:
```shell ```shell
sysinfo --refresh 3 --out /tmp/sensors/sysinfo.txt aster-sysinfo --refresh 3 --out /tmp/sensors/aster-sysinfo.txt
``` ```
@@ -20,7 +20,7 @@ use std::process::{Command, exit};
use std::thread::sleep; use std::thread::sleep;
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
use sysinfo::{Components, DiskKind, Disks, Networks, System}; use sysinfo::{Components, DiskKind, Disks, Networks, System};
use tempfile::{Builder, NamedTempFile}; use tempfile::Builder;
/// Proof of concept sensor value collection for the asterctl screen control tool. /// Proof of concept sensor value collection for the asterctl screen control tool.
#[derive(Parser, Debug)] #[derive(Parser, Debug)]
@@ -66,7 +66,9 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
#[cfg(not(target_os = "linux"))] #[cfg(not(target_os = "linux"))]
let use_smartctl = false; let use_smartctl = false;
if let Some(out_file) = &args.out && let Some(parent) = out_file.parent() { if let Some(out_file) = &args.out
&& let Some(parent) = out_file.parent()
{
fs::create_dir_all(parent)?; fs::create_dir_all(parent)?;
} }
let mut sensors = HashMap::with_capacity(64); let mut sensors = HashMap::with_capacity(64);
@@ -81,7 +83,10 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
} }
if !refresh.is_zero() { if !refresh.is_zero() {
info!("Starting sysinfo with refresh={}ms", refresh.as_millis()); info!(
"Starting aster-sysinfo with refresh={}ms",
refresh.as_millis()
);
} }
loop { loop {
@@ -91,7 +96,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
sysinfo_source.update_sensors(&mut sensors)?; sysinfo_source.update_sensors(&mut sensors)?;
if !disk_refresh.is_zero() && disk_refresh_time.elapsed() > disk_refresh { if !disk_refresh.is_zero() && disk_refresh_time.elapsed() > disk_refresh {
info!("Refreshing individual disks"); debug!("Refreshing individual disks");
update_linux_storage_sensors(&mut sensors, use_smartctl)?; update_linux_storage_sensors(&mut sensors, use_smartctl)?;
disk_refresh_time = Instant::now(); disk_refresh_time = Instant::now();
} }
@@ -137,7 +142,9 @@ fn write_sensor_file(
fs::create_dir_all(temp_path)?; fs::create_dir_all(temp_path)?;
debug!("Creating a new named temp file in {temp_path:?}"); debug!("Creating a new named temp file in {temp_path:?}");
Builder::new().permissions(all_read_perm).tempfile_in(temp_path)? Builder::new()
.permissions(all_read_perm)
.tempfile_in(temp_path)?
} else { } else {
debug!("Creating a new named temp file"); debug!("Creating a new named temp file");
Builder::new().permissions(all_read_perm).tempfile()? Builder::new().permissions(all_read_perm).tempfile()?
@@ -187,6 +194,7 @@ impl SysinfoSource {
pub fn refresh(&mut self) { pub fn refresh(&mut self) {
self.sys.refresh_all(); self.sys.refresh_all();
debug!("Refreshing disks, components, networks");
// TODO research "remove_not_listed_###" refresh parameter // TODO research "remove_not_listed_###" refresh parameter
self.disks.refresh(false); self.disks.refresh(false);
self.components.refresh(false); self.components.refresh(false);
@@ -202,6 +210,7 @@ impl SysinfoSource {
&self, &self,
sensors: &mut HashMap<String, String>, sensors: &mut HashMap<String, String>,
) -> Result<(), Box<dyn std::error::Error>> { ) -> Result<(), Box<dyn std::error::Error>> {
debug!("Refreshing sensors");
for cpu in self.sys.cpus() { for cpu in self.sys.cpus() {
add_sensor( add_sensor(
sensors, sensors,
+1 -1
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "asterctl-lcd" name = "asterctl-lcd"
version = "0.1.0" version = "0.2.0"
description = "AOOSTAR WTR MAX / GEM12+ PRO screen protocol" description = "AOOSTAR WTR MAX / GEM12+ PRO screen protocol"
rust-version.workspace = true rust-version.workspace = true
+2 -2
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "asterctl" name = "asterctl"
version = "0.1.0" version = "0.2.0"
description = "AOOSTAR WTR MAX Screen Control tool" description = "AOOSTAR WTR MAX Screen Control tool"
readme = "../../README.md" readme = "../../README.md"
@@ -11,7 +11,7 @@ license.workspace = true
repository.workspace = true repository.workspace = true
[dependencies] [dependencies]
asterctl-lcd = { path = "../asterctl-lcd", version = "0.1.0" } asterctl-lcd = { path = "../asterctl-lcd", version = "0.2.0" }
anyhow = "1.0.98" anyhow = "1.0.98"
clap = { version = "4.5.42", features = ["derive"] } clap = { version = "4.5.42", features = ["derive"] }
+1 -1
View File
@@ -21,7 +21,7 @@
- [Sensor Value Provider](sensor/provider/README.md) - [Sensor Value Provider](sensor/provider/README.md)
- [Text File Data Source](sensor/provider/text_file.md) - [Text File Data Source](sensor/provider/text_file.md)
- [Shell Scripts](sensor/provider/shell_scripts.md) - [Shell Scripts](sensor/provider/shell_scripts.md)
- [Sysinfo Tool](sensor/provider/sysinfo.md) - [aster-sysinfo Tool](sensor/provider/sysinfo.md)
<!-- <!--
- [For developers](for_developers/panel.md) - [For developers](for_developers/panel.md)
--> -->
+2 -2
View File
@@ -8,11 +8,11 @@ Please note that only Linux has been tested so far.
Executable binaries are available for download on the [GitHub Releases page](https://github.com/zehnm/aoostar-rs/releases). Executable binaries are available for download on the [GitHub Releases page](https://github.com/zehnm/aoostar-rs/releases).
Download the binary for your platform (only Linux available at the moment) and extract the archive. Download the binary for your platform (only Linux available at the moment) and extract the archive.
The archive contains the `asterctl` and `sysinfo` executables which you can run. The archive contains the `asterctl` and `aster-sysinfo` executables which you can run.
## Build from source using Rust ## Build from source using Rust
To build the `asterctl` and `sysinfo` executables from source, you will first need to install Rust and Cargo. To build the `asterctl` and `aster-sysinfo` executables from source, you will first need to install Rust and Cargo.
Follow the instructions on the [Rust installation page](https://www.rust-lang.org/tools/install). Follow the instructions on the [Rust installation page](https://www.rust-lang.org/tools/install).
At least Rust version 1.88 is required. At least Rust version 1.88 is required.
+28 -6
View File
@@ -1,26 +1,27 @@
# Linux systemd Service # Linux systemd Services
## Switch Off LCD on Boot
The systemd unit [lcd-off.service](https://github.com/zehnm/aoostar-rs/blob/main/linux/lcd-off.service) The systemd unit [lcd-off.service](https://github.com/zehnm/aoostar-rs/blob/main/linux/lcd-off.service)
can be installed to automatically switch off the embedded LCD on boot. can be installed to automatically switch off the embedded LCD on boot.
The unit file has been tailored to Debian based Linux distros and has been tested on Proxmox 8.4 and Ubuntu 25.04. The unit file has been tailored to Debian-based Linux distros and has been tested on Proxmox 8.4 and Ubuntu 25.04.
Requirements: Requirements:
- `/dev/ttyACM0`: `dialout` group with rw permissions. - `/dev/ttyACM0`: `dialout` group with rw permissions.
- To run as root: remove `DynamicUser` and `Group` settings. - To run as root: remove `DynamicUser` and `Group` settings.
### Install
## Install
As root user, otherwise `sudo` is required: As root user, otherwise `sudo` is required:
```shell ```shell
cp asterctl /usr/bin/ cp asterctl /usr/local/bin/
cp lcd-off.service /etc/systemd/system/ cp lcd-off.service /etc/systemd/system/
systemctl daemon-reload systemctl daemon-reload
systemctl enable lcd-off systemctl enable lcd-off
``` ```
## Security ### Security
The systemd unit file uses strong security settings to only allow operations required for `asterctl`: The systemd unit file uses strong security settings to only allow operations required for `asterctl`:
@@ -120,3 +121,24 @@ systemd-analyze security lcd-off.service
``` ```
→ Overall exposure level for lcd-off.service: 0.8 SAFE 😀 → Overall exposure level for lcd-off.service: 0.8 SAFE 😀
``` ```
## asterctl Daemon
_TODO_
## aster-sysinfo Daemon
‼️ Work in progress. This also requires the `asterctl` daemon running.
The systemd unit [aster-sysinfo.service](https://github.com/zehnm/aoostar-rs/blob/main/linux/aster-sysinfo.service)
can be installed to automatically collect system sensor information for `asterctl`.
### Install
As root user, otherwise `sudo` is required:
```shell
cp aster-sysinfo /usr/local/bin/
cp aster-sysinfo.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable aster-sysinfo
```
+1 -1
View File
@@ -25,4 +25,4 @@ Only the file data source is supported at the moment, other sources like pipes,
### Sensor Data Providers ### Sensor Data Providers
- Proof of concept [Linux shell scripts](provider/shell_scripts.md) - Proof of concept [Linux shell scripts](provider/shell_scripts.md)
- [sysinfo tool](provider/sysinfo.md) - [aster-sysinfo tool](provider/sysinfo.md)
+5 -5
View File
@@ -1,6 +1,6 @@
# sysinfo Tool # aster-sysinfo Tool
The Rust based [sysinfo](https://github.com/zehnm/aoostar-rs/blob/main/crates/sysinfo) tool gathers many more system sensor values with the help of The Rust based [aster-sysinfo](https://github.com/zehnm/aoostar-rs/blob/main/crates/sysinfo) tool gathers many more system sensor values with the help of
the [sysinfo](https://github.com/GuillaumeGomez/sysinfo) crate. the [sysinfo](https://github.com/GuillaumeGomez/sysinfo) crate.
It supports FreeBSD, Linux, macOS, Windows and other OSes, but it has only been tested on Linux so far. It supports FreeBSD, Linux, macOS, Windows and other OSes, but it has only been tested on Linux so far.
@@ -8,7 +8,7 @@ It supports FreeBSD, Linux, macOS, Windows and other OSes, but it has only been
``` ```
Proof of concept sensor value collection for the asterctl screen control tool Proof of concept sensor value collection for the asterctl screen control tool
Usage: sysinfo [OPTIONS] Usage: aster-sysinfo [OPTIONS]
Options: Options:
-o, --out <OUT> -o, --out <OUT>
@@ -39,13 +39,13 @@ Options:
Single test run with printing all sensors in the console: Single test run with printing all sensors in the console:
```shell ```shell
sysinfo --console aster-sysinfo --console
``` ```
Normal mode providing sensor values for `asterctl` in `/tmp/sensors/sysinfo.txt` every 3 seconds: Normal mode providing sensor values for `asterctl` in `/tmp/sensors/sysinfo.txt` every 3 seconds:
```shell ```shell
sysinfo --refresh 3 --out /tmp/sensors/sysinfo.txt aster-sysinfo --refresh 3 --out /tmp/sensors/aster-sysinfo.txt
``` ```
Note: the lower the refresh rate, the more resources are used! Note: the lower the refresh rate, the more resources are used!
+44
View File
@@ -0,0 +1,44 @@
[Unit]
Description=Daemon for gathering sensor values for asterctl
After=local-fs.target
[Service]
Type=exec
DynamicUser=true
# Use /run/asterctl directory for writing sensor file
RuntimeDirectory=asterctl
#Logging configuration
#Environment=RUST_LOG=debug
ExecStart=/usr/local/bin/aster-sysinfo --out /run/asterctl/sensors/sysinfo.txt --temp-dir /run/asterctl --refresh 3
# Created files are world-readable
UMask=002
# Lock down service, remove single entries or whole section if metrics gathering doesn't work
# START lock down
CapabilityBoundingSet=
LockPersonality=true
RestrictNamespaces=true
ProtectHome=true
ProtectSystem=strict
NoNewPrivileges=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectKernelLogs=true
ProtectControlGroups=true
MemoryDenyWriteExecute=true
RestrictSUIDSGID=true
KeyringMode=private
ProtectClock=true
RestrictRealtime=true
PrivateTmp=true
PrivateUsers=true
ProtectHostname=true
RestrictAddressFamilies=none
SystemCallFilter=@system-service
SystemCallFilter=~@privileged @resources
SystemCallErrorNumber=EPERM
# END lock down
[Install]
WantedBy=multi-user.target