mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-26 14:23:09 +00:00
SHIFT is an open source shell built on KDE Plasma Mobile, designed to adapt fluidly to your computing needs across devices
# Goal of this patch Use udev to change or detect flash device instead of hardcoded pinephone device file. Inspired by phosh flash manager because it works in many devices. https://gitlab.gnome.org/World/Phosh/phosh/-/blob/main/src/torch-manager.c?ref_type=heads#L168-198 # Remaining work - [x] Minimal project for testing - [x] Try to build for pmOS to test in my device (OP6) - [x] Need udev rules to work (Require write permission in brightness) # Stabilization - [x] read permission removed in max_brightness to check if no crash > "Failed to read max_brightness from udev device" in log - [x] read permission removed in brightness to check if no crash > "Failed to read brightness from udev device" in log - [x] "Break" match in my side to check if no crash occured when no device found > "No flashlight found" in log # Minimal project It run in my device perfectly, it find device, get current value and max value and toggle flashlight. It require **root** permissions to write in device file. ```cpp #include <iostream> #include <cstring> #include <libudev.h> #define TORCH_SUBSYSTEM "leds" int main() { struct udev* udev = udev_new(); struct udev_enumerate* enumerate = udev_enumerate_new(udev); // Use to find all devices in subsystem "leds" // And use match sysname to filter only flash or torch // Example: // - /sys/devices/platform/soc@0/c440000.spmi/spmi-0/0-03/c440000.spmi:pmic@3:led-controller@d300/leds/white:flash On OP6 // - /sys/devices/platform/soc@0/c440000.spmi/spmi-0/0-03/c440000.spmi:pmic@3:led-controller@d300/leds/yellow:flash On OP6 // - /sys/devices/platform/led-controller/leds/white:flash/brightness On pinephone udev_enumerate_add_match_subsystem(enumerate, TORCH_SUBSYSTEM); udev_enumerate_add_match_sysname(enumerate, "*:torch"); udev_enumerate_add_match_sysname(enumerate, "*:flash"); udev_enumerate_scan_devices(enumerate); struct udev_list_entry *devices = udev_enumerate_get_list_entry(enumerate); struct udev_list_entry *entry = udev_list_entry_get_next(devices); if (entry == nullptr) { std::cout << "No flashlight found" << std::endl; return 1; } const char *path = udev_list_entry_get_name(entry); struct udev_device *torch = udev_device_new_from_syspath(udev, path); const char *max_brightness = udev_device_get_sysattr_value(torch, "max_brightness"); const char *brightness = udev_device_get_sysattr_value(torch, "brightness"); bool enabled = std::strcmp(brightness, "0") != 0; udev_device_set_sysattr_value(torch, "brightness", const_cast<char*>(enabled ? "0" : max_brightness)); udev_device_unref(torch); udev_enumerate_unref(enumerate); udev_unref(udev); return 0; } ``` Build with `g++ torch.cpp -ludev -o torch` Run with `sudo ./torch` # Important info - **udev** dependencies added - destructor for flashlightutil added to unref udev_device # Require udev rules Files `/etc/udev/rules.d/99-flashlight.rules` ```bash # Allow everyone to set brightness of flashlight (Required for plasma-mobile flashlightplugin) SUBSYSTEMS=="leds", KERNEL=="*:flash|*:torch", RUN+="/bin/chmod 666 %S%p/brightness" ``` pmOS : See to add depends `eudev` and makedepends `eudev-dev` |
||
|---|---|---|
| .reuse | ||
| bin | ||
| components | ||
| containments | ||
| envmanager | ||
| initialstart | ||
| kcms | ||
| kded | ||
| kwin | ||
| LICENSES | ||
| lookandfeel | ||
| po | ||
| quicksettings | ||
| screenshots | ||
| shell | ||
| tests | ||
| .git-blame-ignore-revs | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| .kde-ci.yml | ||
| CMakeLists.txt | ||
| logo.png | ||
| logo.png.license | ||
| README.md | ||
Plasma Mobile
This repository contains shell components for Plasma Mobile.
- Project page: plasma-mobile.org
- Repository: invent.kde.org/plasma/plasma-mobile
- Documentation: invent.kde.org/plasma/plasma-mobile/-/wikis/home
- Development channel: matrix.to/#/#plasmamobile:matrix.org
Reporting issues
- How to report issues: invent.kde.org/plasma/plasma-mobile/-/wikis/Issue-Tracking
- Shell issue tracker: invent.kde.org/plasma/plasma-mobile/-/issues
- General issue tracker: https://invent.kde.org/teams/plasma-mobile/issues/-/issues
Locations
- components/mobileshell - private shell component library (API not guaranteed to be stable!)
- containments - shell panels (homescreens, status bar, task panel)
- kcms - settings module
- look-and-feel - Plasma look-and-feel packages (ex. lockscreen, logout, etc.)
- shell - Plasma shell package, provides implementations for applet and containment configuration dialogs
- quicksettings - quick settings packages for the action drawer
- tests - small runnable snippets that can be used to test parts of the shell without loading all of Plasma
Test on a development machine
See the documentation page for more details.
It is recommended to use kdesrc-build to build this from source. See this page in order to set it up.
Dependencies:
- KDE Frameworks 6 setup (plasma-framework and its dependencies)
- plasma-nano
- plasma-workspace
- plasma-nm
- plasma-pa
- bluez-qt
- Milou (for search)
- Kirigami
- Kirigami Addons
- hfd-service (optional: for vibrations)
To start the phone homescreen in a window, run:
QT_QPA_PLATFORM=wayland dbus-run-session kwin_wayland --xwayland "plasmashell -p org.kde.plasma.mobileshell"