Running in the background¶
The examples
directory contains the files for each platform. Before you start:
- Clone the repository and run the commands below from its root.
- Install Pipe-Ping with
uv tool install pipe-ping. - Create the config file. See Getting started.
Linux (systemd)¶
Install and start the systemd user service:
mkdir -p ~/.config/systemd/user
cp examples/linux/pipe-ping.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable --now pipe-ping
Check its status and output:
The service runs ~/.local/bin/pipe-ping. If pipe-ping is installed
elsewhere, set ExecStart in pipe-ping.service to the output of
which pipe-ping.
macOS (launchd)¶
macOS only shows notifications from signed app bundles, so Pipe-Ping must be built as an app.
-
Build
Pipe-Ping.appand copy it to/Applications: -
Register a launch agent to start it at login:
-
Allow notifications when macOS asks.
To stop the agent:
Including plugins¶
Plugins must be built into the app. For each plugin, edit the command in
examples/macos/build_app.sh:
- Add
--with <path>to theuv runoptions. - Add
--copy-metadata <distribution name>. - Add
--collect-submodules <module name>.
For example, to include the example plugin (added lines are highlighted):
uv run --project ../.. --with pyinstaller --with ../plugin pyinstaller \
--windowed \
--noconfirm \
--name Pipe-Ping \
--osx-bundle-identifier io.github.ejemmett.pipe-ping \
--copy-metadata pipe-ping \
--copy-metadata pipe-ping-example \
--collect-submodules pipe_ping \
--collect-submodules pipe_ping_example \
--collect-data pipe_ping \
--collect-data desktop_notifier \
launcher.py
Paths are relative to examples/macos, because the script runs from there.
Rebuild and reinstall the app after editing the script.
Windows (Task Scheduler)¶
Register a scheduled task that starts Pipe-Ping in the background now and at each login:
To remove the task: