Thanks for helping make Linux presentations better. Bug fixes, device support, documentation, translations, and focused feature improvements are all welcome.
For a substantial change, please open an issue before investing heavily so the approach and project scope can be agreed on. Small, self-contained fixes can go straight to a pull request.
The current Projecteur development line targets:
- KDE Plasma 6.7 or newer on Wayland
- Qt 6.10 or newer
- LayerShellQt and KPipeWire 6.7 or newer
- Linux presenter devices exposed through evdev and hidraw
Qt 5, X11, and non-Plasma support are maintained only for critical fixes on the
legacy/qt5 branch.
- A C++17 compiler
- CMake 3.20 or newer
- Extra CMake Modules 6.7 or newer
- Qt 6.10 or newer with Core, DBus, Gui, Quick, ShaderTools, WaylandClient, and Widgets
- KDE Frameworks 6.7 or newer: Config, ConfigWidgets, CoreAddons, DBusAddons, GlobalAccel, I18n, Notifications, Package, KirigamiPlatform, WidgetsAddons, WindowSystem, and XmlGui
- Plasma 6.7 or newer
- KPipeWire 6.7 or newer
- LayerShellQt 6.7 or newer
- gettext for translations
Package names vary by distribution. The CI workflow and
Justfile are the canonical dependency lists for Arch Linux.
git clone https://github.com/gbin/Projecteur.git
cd Projecteur
cmake -S . -B build \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DPACKAGE_TARGETS=OFF
cmake --build build --parallelThe binary in build/projecteur can exercise most of the application, but live
zoom requires a proper installation. KWin authorizes the restricted capture
interfaces by matching the executable to Projecteur's installed desktop
metadata.
For a complete local install:
sudo cmake --install build
sudo udevadm control --reload-rules
sudo udevadm triggerThe install also provides the Plasma applet, desktop entry, AppStream metadata, udev rules, notifications, D-Bus service, shell completion, and manual page.
On Arch Linux and Arch-based distributions, install just and use:
just build
just package
just installjust buildinstalls missing dependencies and compiles Projecteur.just packagepackages the current working tree—including uncommitted files—intobuild/packages/.just installbuilds and installs that package withpacman, then restarts Plasma Shell and Projecteur.
sudo is used only when dependencies or the finished package need to be
installed.
At minimum, rebuild and run the same smoke checks as CI:
cmake --build build --parallel
./build/projecteur --version
./build/projecteur --help
git diff --checkFor UI or device changes, also test the relevant workflow manually on Plasma Wayland. In the pull request, mention the Plasma and Qt versions, connection type, and presenter model you tested.
| Path | Purpose |
|---|---|
src/ |
Application, device handling, settings, and QWidget UI |
qml/ |
Wayland overlay and zoom shaders |
plasma/ |
Native Plasma system tray applet |
protocols/ |
Wayland protocol definitions used by the zoom pipeline |
cmake/ |
Build, packaging, desktop, AppStream, and manual templates |
po/ |
gettext translation catalogs |
doc/ |
User documentation, screenshots, and changelog |
packaging/arch/ |
Local Arch package recipe |
Add compile-time device support to devices.conf using:
vendorId, productId, [usb|bt], name
For example:
0x0abc, 0x1234, usb, Example Presenter
CMake uses this list to generate both device definitions and udev rules. If the
device needs special event decoding or HID++ behavior, changes in src/ may also
be required.
For quick experiments, Projecteur accepts
--additional-device VENDOR:PRODUCT at runtime.
Projecteur uses KDE's KI18n/gettext system. Run Messages.sh through the standard
KDE translation tooling to update projecteur.pot. Catalogs placed at
po/<locale>/projecteur.po are compiled and installed automatically.
Keep user-visible strings translatable and avoid assembling sentences from fragments.
Keep each pull request focused. Include:
- what changed and why;
- how it was verified;
- screenshots for visible UI changes;
- device IDs and connection type for hardware-specific changes.
By contributing, you agree that your work is provided under the project's MIT License.