Hallo,
ich habe zur Zeit Probleme an meinem Laptop mit Ubuntu die Helligkeit einzustellen. Auf GitHub habe ich eigentlich ein viel versprechendes Programm gefunden, das bei einigen anderen Usern wohl auch funktioniert. Bei mir leider nicht.
Ich dachte, vielleicht kann ich das als Grundgerüst nehmen und das so umschreiben, das es bei mir auch geht.
Glücklicherweise ist ein Großteil in Python geschrieben.
Allerdings wird während des Programmablaufs ein C-Programm aufgerufen und ich würde gerne wissen was das denn macht.
Der Aufruf des C-Programms [tt]subprocess.run([ICC_BRIGHTNESS_GEN, icc_filepath, str(brightness), str(max_brightness)], check=True)
Es wird also ein Pfad und zwei Werte übergeben. Das C-Programm sieht so aus:
/*
* Copyright 2017 - 2019, Udi Fuchs
* SPDX-License-Identifier: MIT
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <lcms2.h>
cmsHPROFILE create_srgb_profile(double brightness)
{
cmsHPROFILE hsRGB = cmsCreate_sRGBProfile();
cmsMLU *mlu = cmsMLUalloc(NULL, 1);
char description[20];
snprintf(description, 20, "Brightness %.2f", brightness);
cmsMLUsetASCII(mlu, "en", "US", description);
cmsWriteTag(hsRGB, cmsSigProfileDescriptionTag, mlu);
cmsMLUfree(mlu);
cmsContext context_id = cmsCreateContext(NULL, NULL);
double curve[] = {1.0, brightness, 0.0}; // gamma, a, b for (a X +b)^gamma
cmsToneCurve *tone_curve[3] = {
cmsBuildParametricToneCurve(context_id, 2, curve),
cmsBuildParametricToneCurve(context_id, 2, curve),
cmsBuildParametricToneCurve(context_id, 2, curve),
};
cmsWriteTag(hsRGB, cmsSigVcgtTag, tone_curve);
cmsFreeToneCurve(tone_curve[0]);
cmsFreeToneCurve(tone_curve[1]);
cmsFreeToneCurve(tone_curve[2]);
return hsRGB;
}
int main(int argc, const char *argv[]) {
if (argc == 4 &&
strspn(argv[2], "0123456789") == strlen(argv[2]) &&
strspn(argv[3], "0123456789") == strlen(argv[3])) {
const char *filename = argv[1];
int brightness = atoi(argv[2]);
int max_brightness = atoi(argv[3]);
double ratio = (double)brightness / max_brightness;
cmsHPROFILE hsRGB = create_srgb_profile(ratio);
cmsSaveProfileToFile(hsRGB, filename);
return 0;
}
fprintf(stderr, "%s filename brightness max-brightness\n", argv[0]);
fprintf(stderr, "brightness and max-brightness must be integers.\n");
return 1;
}
Alles anzeigen
Der Link zum Projekt:
Wäre nett wenn mir jemand sagen könnte was da genau passiert. Wenn ich das richtig verstehe, muss 'brightness' ja in irgendeine Datei geschrieben werde.
Hoffe ich hab das Offensichtliche nicht übersehen, so langsam qualmt mir der Kopf.
Vielen Dank und Grüße
Dennis