Releases: digitaltrails/vdu_controls
v2.6.0 Road Warrior - Support Laptop Panels
- Added laptop-panel support, see Setting option laptop-panel-enabled. Requires the commonly available brightnessctr command to be installed .
- Udev is used to detect laptop brightness events, such as up/down-brightness function-keys and inactivity-dimming (requires python3-pyudev).
- The control-panel icons/titles are now shortcuts to the relevant Settings tabs.
- Fixed Settings text-input line-height on small screens.
- Slightly improvements to the spacing/layout of the main-panel.
Full Changelog: v2.5.0...v2.6.0
v2.5.0 Modernity
Version 2.5.0 delivers some cosmetic UI updates to better blend in with modern UI trends - in particular Plasma-6.
- Visual refresh of the Main-panel. Inspired by a recent fork by @ViktorSharga.
- Added option "toolbar-at-top" to configure the top/bottom placement of the toolbar in the main-window. Top placement is more Plasma-6-like and may also be useful when combined with top-located system-trays
- Added option "separate-status-bar" to allow the main-window's status-bar to be separated from its toolbar. This may be useful when combined with "toolbar-at-top".
- Replaced QProgressBar with a more modern circular busy-spinner.
- Added a tooltip to the status-bar that shows the last 10 status messages.
- The context-menu now includes a Control-Panel menu-item on all desktops - previously it was Gnome-only (for tray extensions), but Xfce's tray also needs it.
- Light-Metering window - corrected the horizontal tick mark placement on the sun-plot.
- Light-Metering window - added enlarged tick-marks to the sun-plot at 3,6,9,15,18,21 hours.
- Added option "tray-follows-theme" (default enabled) to invert the tray icon’s light/dark state when the desktop theme changes. It can be set for trays that flip-with the desktop or flip-opposite to the desktop, or unset for trays don’t change at all (there isn't a common way to detect tray-themes, so this cannot be automated).
- Internal code simplifications and cleanups.
Full Changelog: v2.4.3...v2.5.0
What's Changed
- Standardize setup.cfg by @doronbehar in #120
New Contributors
- @doronbehar made their first contribution in #120
Full Changelog: v2.4.3...v2.5.0
v2.4.3 metering bug fix
A minor release to fix one bug:
- Fix a rare TypeError when light metering (probably only affects those using hardware light metering).
- Some code cleanups for the splash screen.
v2.4.2 Small Potatoes
Version 2.4.2 contains some minor fixes.
- Fix the Lux-Dialog's display of the Daylight-Factor for non semi-automatic metering.
- Make sure the tray-icon always shows the correct lux-level icon.
- Correct the lux-zone boundaries on the ambient slider.
Full Changelog: v2.4.1...v2.4.2
v2.4.1 Qt6 or bust
Version 2.4.1 contains numerous small changes to achieve compatibility with Qt6/PyQt6.
If PyQt6 is available, it will be used by default. if you prefer to stick with Qt5, unset the prefer-qt6 option in the Settings-Dialog.
- Conversion to PyQt6 (while maintaining PyQt5 compatibility).
- PyQt6 is used by default, with a fallback to PyQt5 should it not be available.
- New option, prefer-qt6, disable this option to prefer PyQt5 over PyQt6.
- Various changes to UI layouts to accommodate both Qt5 and Qt6 (including Qt6 High-DPI scaling).
- Various tweaks to the main window to make the spacious Qt6 styling more compact.
- Renamed the smart-uses-xcb option to smart-uses-xwayland to better reflect what the option does.
- Fixed smart-window preservation when the app was closed from the tray without ever showing the main window.
- Fixed weather selection, on selection, restore any missing weather definition files.
- Fixed initialization-preset error handling (fix undefined variable).
- Only persist lux_daylight_factor if in semi-auto mode (stop hardware light metering overwriting the user's choice).
- The DBus-events default setting has been corrected to true/enabled.
- Dragging the Preset-Dialog elevation to below the horizon now works properly (previously it was jerky).
What's Changed
- PyQt6 - support both PyQt5 and PyQt6 by @digitaltrails in #112
Full Changelog: v2.4.0...v2.4.1
v2.4.0 Here Comes the Sun
Semi-Automatic Brightness Adjustment by Geolocation
In versions 2.4, the ambient-light-level slider has been combined with an estimate of local solar-illumination to achieve semi-automatic brightness control throughout the day. Adjusting the slider sets the ratio between indoor-illumination and outdoor solar-illumination. Should circumstances change, adjusting the slider updates the ratio. (Solar-illumination is estimated for a location by using the local date-time to determine sun-angle, and from that, estimates for illumination, and air-mass.)
Each display's brightness is periodically updated by matching the estimated indoor-illumination against each display's custom lux-brightness-response profile.
How to enable it
- Settings Dialog: set your geographic location ➀.

- Light Metering Dialog: check that the light-meter ➁ is set to Semi-automatic geolocated (it's normally the default). If you haven't already done so, setup Lux Brightness Response Profiles for each display ➂. Older displays, with weak back lights, can be given relatively flat profiles, perhaps varying from 80% to 100% ④. Newer displays, with HDR capable back lights, can be given stepper profiles, possibly varying from 10% to 100% ⑤.

How to use it:
- Set the prevailing indoor light level using the ambient-light-level slider ➀.
- If not already enabled, click the sun icon to enable automatic adjustments ➁.
- Starting from your chosen level; the application will periodically updates ambient-light-level ➀ in proportion to the expected outdoor sunlight (the adjustment period is set in the Light Metering Dialog).
- If conditions change, adjust the ambient-light-level slider ➀ to establish a new ratio of indoor to outdoor illumination.
The indoor and outdoor illumination-curves and current-estimates are shown in the Light Metering Dialog ➂, along with the estimate of outdoor lux (Eo) and the Daylight-Factor (DF), the ratio of indoor to outdoor lux.
The daylight-factor, the ratio of indoor/outdoor light, can optionally be saved as part of a Preset. For example, a "rainy-day" Preset might pre-can might restore a low daylight-factor, where as, a "sunny-day" preset might restore a high one.
Release summary
- Added the ability to estimate the solar-illumination for a given geolocation and time (#107).
- Added semi-automatic brightness adjustment proportional to geolocated solar-illumination.
- Ambient-light-level slider: when the slider is manually adjusted, it has the side-effect of determining the ratio of indoor-illumination/solar-illumination (the the daylight-factor, DF).
- Light-Metering dialog: semi-automatic metering replaces manual metering.
- Light-Metering dialog: added a display of estimated outdoor-lux (Eo) and the current daylight-factor (DF).
- Light-Metering dialog: added a plot of the current day's estimated solar and indoor illumination.
- Light-Metering dialog: replaced the profile-selector combo-box with a list for easier accessibility.
- Light-Metering dialog: added the ability to dynamically adjust for display DPI.
- Preset dialog: added an option to save/restore the daylight-factor. This can be used to save daylight factors for various conditions, or to activate them at a solar-elevation.
- Settings dialog: disabling protect-nvam now works properly for adjustments due to light-metering.
- Duplicate Lux-profile points are filtered out to prevent confusing the UI and lux evaluation process.
- DBus ddcutil-service: altered the detection parameters to request only valid displays (prevents errors) (#103).
- Ambient-light brightness adjustment: prevent an infinite-loop if no brightness controls are enabled.
- Preset-restoration and ambient-light brightness-adjustment now share the same code for background operations.
- Model-only config files are no longer created, they're confusing and likely not used (they can still be created manually with a text editor).
Full Changelog: v2.3.0...v2.4.0
v2.3.0 DIY DDC
Version 2.3.0:
- Fix the doze function, this improves the responsiveness of all slider controls.
- Fix an infinite loop if menu->quit is used when the Failed to obtain capabilities dialog is showing.
- The Settings-Dialog has been reorganized to make it scrollable.
- When lux options are enabled, the tray will show the icon for current light-level (if no preset is active).
- Renamed two light-light levels more appropriately (room becomes subdued, rise-set becomes twilight).
- Support a user-defined ddcutil-emulator executable for controlling laptop-panels or other non-DDC-capable displays. A template sample emulator written in bash is included as a DIY starter (sample-scripts/laptop-ddcutil-emulator.bash).
- Add smart-uses-xcb option to control the use of XWayland for the smart positioning of windows (defaults to yes).
- Fix title-bars on sub-windows in COSMIC.
- The About Dialog now includes some desktop and platform information.
Full Changelog: v2.2.0...v2.3.0
v2.2.0 What's in a name
- Version 2.2.0, a new-feature release.
- Add a vdu-name option for assigning meaningful/user-friendly names to each VDU (enhancement request: #100).
- Implement an order-by-name option that orders lists and tabs by VDU name.
- Hovering over a settings-dialog tab-name or save-button reveals the settings-filename as a tooltip.
- If smart-window is enabled in a Wayland desktop, automatically use XWayland. (Wayland
doesn't allow an application to precisely place it's own windows!) - Altering the smart-window option now requires a restart (due to the Wayland/XWayland changes).
- The smart-window option save/restore of main-window has been made more consistent.
- The COSMIC desktop is treated as GNOME-like (the system-tray right-mouse menu includes a control-panel menu-item).
v2.1.4 - dbus events optional
Version 2.1,4
- Provide a setting for enabling dbus-events - ddcutil-service DPMS and hotplug detection.
- Default the dbus-event setting to off, which is less troublesome for some VDUs/GPUs/drivers.
v2.1.3 - ddcutil 2.2 compatablity
- Fix the error-dialog option "ignore-VDU" when ddcutil cannot communicate with a VDU.
- Avoid abrupt u-turns in automatic brightness, don't reassess the lux level while making an adjustment.
- Update the EDID-parser to accept the command line output from ddcutil 2.2 (for those not using ddcutil-service).

