स्क्रिप्ट कैसे लिखें जो / sys / class / backlight / ideapad / में ब्राइट फाइल को एडिट करता है?
मैं i3 wm का उपयोग कर रहा हूं और मुझे अपनी ब्राइटनेस फाइल मिल गई है /sys/class/backlight/ideapad/brightness
।
╰─$ ls -la /sys/class/backlight/ideapad/
-rw-r--r-- 1 root root 4096 Dec 18 16:55 brightness
जब मैं चमक को बदलना चाहता हूं (4 से कहूं)
sudo sh -c "echo 4 > /sys/class/backlight/ideapad/brightness"
मैं एक स्क्रिप्ट लिखना चाहूंगा जो 1 से ब्राइटनेस को बढ़ाएगा या घटाएगा और फिर उस स्क्रिप्ट को i3 wm config फाइल ( CTRL+F1
उदाहरण के लिए) में कुछ मुख्य संयोजन से बाँध देगा ताकि मैं ब्राइटनेस फाइल को एडिट करने के बजाय कीज़ दबाकर ब्राइटनेस को कंट्रोल कर सकूँ मैन्युअल रूप से हर बार मैं चमक को बदलना चाहता हूं।
चूंकि इसके लिए रूट विशेषाधिकार की आवश्यकता होती है, मुझे यकीन नहीं है कि इसे कैसे प्राप्त किया जाए। क्या मुझे अपना उपयोगकर्ता brightness
फ़ाइल के स्वामी के रूप में बदलना चाहिए या क्या मुझे फ़ाइल का समूह बदलना चाहिए? या किसी अन्य तरीके से आप सोच सकते हैं?
जवाब
/sysएक रैम आधारित वर्चुअल फाइल सिस्टम है , इसलिए इसकी फाइलों की अनुमति बदलने से रिबूट बच नहीं पाएगा।
यह सी कार्यक्रम वह समाधान है जो मैंने कुछ समय पहले लिखा है और मुझे कभी विफल नहीं किया है। इसके लिए मानक लिनक्स प्रणाली के पास कुछ भी नहीं होना चाहिए।
#include <stdlib.h>
#include <stdio.h>
#define BUFSIZE 10
int main(int argc, char **argv) {
FILE *fp;
char scurr[BUFSIZE];
long new, curr, incr, min = 10;
/* An argument with an integer increment must be supplied */
if (argc != 2 || (incr = strtol(argv[1], NULL, 10)) == 0) { return(1); }
/* Retrieve the current brightness and increment it in the brightness file */
if ((fp = fopen("/sys/class/backlight/ideapad/brightness", "r+"))
&& fgets(scurr, BUFSIZE, fp)) {
curr = strtol(scurr, NULL, 10);
rewind(fp);
new = curr + incr;
if (new < min) { new = min; }
fprintf(fp, "%ld\n", new);
fclose(fp);
} else { return(2); }
return(0);
}
इसे संकलित करें ( br.c
फ़ाइल का नाम, br
निष्पादन योग्य), रूट को स्वामी बनाएं, सेट्युड बिट चालू करें और निष्पादन योग्य को अपने में कहीं रखें PATH
( /usr/local/bin/
यह एक विशिष्ट विकल्प है)।
cc br.c -o br
chown root br
chmod u+s br
mv br /usr/local/bin/
अब बस क्रियान्वित करने से br -100
आपकी चमक 100 कम हो जाती है।
देखें कि मैंने न्यूनतम चमक भी निर्धारित की है min = 10
। यह मेरी मशीन पर काफी कम है कि एक मुश्किल से नोटिस पर है। अपनी आवश्यकताओं के अनुसार उस मूल्य को ट्वीक करें। कई लोगों के लिए भी पथ घटक intel-backlight
इसके बजाय कुछ ऐसा होगा ideapad
।
वैकल्पिक दृष्टिकोण
सेतुनिधि br
पूरे मूल अधिकार देती है। यद्यपि यह इस विशेष कार्यक्रम में कारनामों को नहीं बढ़ाता है, यदि आप बहुत सतर्क रहना चाहते हैं और इसे केवल आवश्यक निजीकरण सेट देते हैं - अर्थात्, फ़ाइल की अनुमति जाँच को बायपास करने के लिए - chown
और उपयुक्त क्षमता सेchmod
ऊपर और लाइनों को स्थानापन्न करें।
setcap cap_dac_override+ep br
समूह स्वामित्व बदलना आमतौर पर जाने का तरीका है, लेकिन ध्यान दें कि आपको इसे रिबूट के बाद हर बार करना होगा। ऐसा करने के लिए आर्च विकी में वर्णित स्वचालित रूप से udev नियम बनाएं :
डिफ़ॉल्ट रूप से, केवल रूट इस विधि द्वारा चमक को बदल सकता है। वीडियो समूह में उपयोगकर्ताओं को चमक को बदलने की अनुमति देने के लिए, एक udev नियम जैसे कि निम्नलिखित का उपयोग किया जा सकता है:
/etc/udev/rules.d/backlight.rules
ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="acpi_video0", GROUP="video", MODE="0664"
यदि आप video
समूह के सदस्य नहीं हैं, तो अपने उपयोगकर्ता को इसमें जोड़ें:
sudo gpasswd video -a $(whoami)
ध्यान दें कि आपने समूह सदस्यता जानकारी को ताज़ा करने के लिए लॉग आउट किया है और लॉग इन करें:
su -l $(whoami)
जाँच करें कि क्या आप video
id वाले समूह के सदस्य हैं , इसे कुछ इस तरह प्रिंट करना चाहिए:
$ id
uid=1000(ja) gid=100(users) groups=100(users),16(dialout),17(audio),18(video),83(plugdev),215(vboxusers),281(docker)
बेशक, आप किसी भी समूह का उपयोग कर सकते हैं जो आपका उपयोगकर्ता udev नियम का सदस्य है, जरूरी नहीं video
।