Giter VIP home page Giter VIP logo

asdcontrol's Introduction

Apple Display Brightness Control

A simple program to control the brightness of Apple thunderbolt dipsplays (Pro Display XDR, Studio Display) on Linux.

Based on acdcontrol by Pavel Gurevich.

Compiling

Make sure you have installed the necessary packages in your distribution, e.g. sudo apt install build-essential on Ubuntu.

Run make. A new file asdcontrol should appear in the same directory.

Use sudo make install to install the compiled program in /usr/local/bin/asdcontrol.

Usage

./asdcontrol [--silent|-s] [--brief|-b] [--help|-h] [--about|-a] [--detect|-d] [--list-all|-l] <hid device(s)> []

Parameters

-s, --silent

Suppress non-functional program output

-b, --brief

Only output the brightness level when no absolute or relative brightness is provided in the command line.

-h, --help

Display the built-in help message

-a, --about

Display the copyright and license information.

-d, --detect

Detect the Apple Display HID device. You must also provide /dev/usb/hiddev* (or /dev/hiddev*, depending on your Linux distribution) in the command line for the detection to do anything useful.

-l, --list-all

Lists all supported monitor models and quits.

<brightness>

When this option is not provided, the program will read and report the current brightness level of the monitor.

When this option is set, the program will set the brightness to the option's value. You can use a relative brightness level by prefixing the option value with + to increase the brightness by this much, or - to decrease the brightness by this much. Please note that you must place -- before a negative value. See the examples.

The brightness is an integer (whole number). For the Apple Studio Display (2022) this can be between 400 and 60000. Not all values result in a visible backlight power change. It appears that the granularity is around 2980 (for a total of 20 brightness steps from lowest to highest brightness) for the 2022 Apple Studio Display.

Alternatively, you can use a percentage e.g. 20% to set the brightness to this monitor-specific level. You can of course prefix by + or - to increase or decrease, respectively, the brightness by this amount.

Examples

Assuming that your monitor's device is /usb/dev/hiddev0 here are some usage examples:

asdcontrol --help

Show the built-in help message.

asdcontrol --about

Show the copyright and license information.

asdcontrol --detect /dev/usb/hiddev*

Detect the device which corresponds to your Apple Display.

asdcontrol /usb/dev/hiddev0

Read and report the current brightness level.

asdcontrol /usb/dev/hiddev0 10000

Set the brightness to 30000; that's about 50% brightness. The range of values for Apple Studio Display is 400 to 60000. The range of values for Apple XDR Display is still untested.

asdcontrol /dev/hiddev0 +5960

Increment current brightness by 5960 (that's a 10% brightness increase).

asdcontrol /dev/hiddev0 -- -5960

Decrement current brightness by 5960 (that's a 10% brightness decreate). Please note the -- before the negative number. Without the double dash, a single dash (‘tack’) is understood as setting an option, therefore it won't work.

Troubleshooting

Cannot detect the display

This program only supports Apple Displays (Pro Display XDR and Studio Display).

To make sure that the Apple Display is recognised correctly by the kernel's USB subsystem run lsusb | grep -E '05ac:(1114|9243)'. It should reply with something like the following (the bus and device may be different on your system):

Bus 005 Device 003: ID 05ac:1114 Apple, Inc. Studio Display

The stuff next to the ID is the USB vendor identifier, followed by a colon, followed by the USB product identifier, followed by a space and the product description as returned by the connected device. This program looks for the vendor identifier 05ac (Apple, Inc) and the product ID 1114 or 9243 (Apple Studio Display, Pro Display XDR).

If you want to control an older Apple monitor please look at https://github.com/yhaenggi/acdcontrol.

This device is not a USB monitor!

This program checks that the HID device you provided in the command line implements the USB Monitor Control interface. If it doesn't, it returns the error “This device is not a USB monitor”.

Try using a different USB HID device. The one you are using does not correspond to your Apple Display.

Permission denied

If you get Permission denied trying to use this program you have a permissions issue. You need write permissions to the Apple Display's HID device to be able to control its brightness if you are not root.

The correct way to address this is to create a udev rule:

For Apple XDR Display

Create a file /etc/udev/rules.d/50-apple-xdr.rules with the contents:

KERNEL=="hiddev*", ATTRS{idVendor}=="05ac", ATTRS{idProduct}=="9243", GROUP="users", OWNER="root", MODE="0660"

For Apple Studio Display

Create a file /etc/udev/rules.d/50-apple-studio.rules with the contents:

KERNEL=="hiddev*", ATTRS{idVendor}=="05ac", ATTRS{idProduct}=="1114", GROUP="users", OWNER="root", MODE="0660"

Afterwards, reload the udev permissions with sudo udevadm control --reload-rules.

The program checks if the HID device you have provided is a known model (based on the USB vendor and product IDs reported by the device) and whether it supports HID Monitor Control. As a result it should be safe to use against the wrong HID device; it will simply tell you something like “This device is not a USB monitor!”.

This also means that if you are not sure which HID device is your Apple Display you can run this program against /dev/usb/hiddev* (or /dev/hiddev*, depending on your Linux distribution), i.e. tell it to go through all known HID devices. The program will operate only against the HID devices which correspond to an Apple Display.

Known Limitations

Currently, the display detection process is not fully automated as you need to specify a HID device path. You can, of course, use /dev/usb/hiddev* (or /dev/hiddev*, depending on your Linux distribution) to have the program go through the entire list of HID devices connected to the computer. This is generally safe, albeit a tad slow. If you have more than one Apple Display monitors it will also apply the brightness controls to both monitors which might not be what you intended to do.

This program only controls the monitor brightness. Apple monitors do not expose any controls for contrast, saturation etc. Moreover, this program cannot be used to update the monitor's firmware or change the camera settings such as Center Stage; this is only possible through macOS (the monitor essentially runs a cut-down version of iOS).

asdcontrol's People

Contributors

nikosdion avatar sirn avatar supermarin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

asdcontrol's Issues

Possible to use over displayport?

I am using a displayport->usb cable in order to use my display on Debian 12. Do you know if this would be possible to use with this software? I am unable to see anything with the detect command, likely because my display is not on the usb bus:

 sudo ./asdcontrol --detect /dev/usb/hiddev*
ASDControl 0.4 -- Apple Studio Display Brightness Control
Copyright (c) 2023-2024 Nicholas K. Dionysopoulos

hiddev driver version is 1.0.4
hiddev driver version is 1.0.4

Thanks!

Not an issue, but this just works, so wanted to say thanks!

Pro Display XDR support

This is a really cool tool! Does it work with Pro Display XDR, and if not, is there another tool that does?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.