рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░ред рдПрдХ рджрд┐рди рдореИрдВ рдЕрдкрдиреЗ рд╕реИрдорд╕рдВрдЧ n143 рд▓реИрдкрдЯреЙрдк рдкрд░ рдЬреЗрдВрдЯреВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рд╕рдВрдХрд▓рди рдХреА рдПрдХ рд░рд╛рдд рдХреЗ рдмрд╛рдж, рдпрд╣ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рд╢реЗрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдХреЗрдбреАрдИ 4 рдЪреБрдирд╛, рдЗрдХрдЯреНрдареЗ, рд╕реНрдерд╛рдкрд┐рддред рдмреИрдХрд▓рд╛рдЗрдЯ рд╕реНрддрд░ (рдФрд░ рдХреЗрдбреАрдИ рд╕рд┐рд╕реНрдЯрдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдорд╛рдпреЛрдЬрди) рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдлрдПрди-рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдЙрдкрдХрд░рдг рдФрд░ рдПрдлрдПрди-рдХреБрдВрдЬрд┐рдпреЛрдВ рдиреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ samsung-backlight рдФрд░ samsug-tools рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛, рдХреГрдкрдпрд╛ рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗред
рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ Google рдиреЗ "рд╕реЗрдЯрдкрд╕реА" рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкрд╛рдпрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдкреАрд╕реАрдЖрдИ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА lspci рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ "рдкрддрд╛" рдвреВрдВрдвреЗрдВ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИ рдФрд░ рдЗрд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдореВрд▓реНрдп рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред
# lspci 00:00.0 Host bridge: Intel Corporation Mobile 4 Series Chipset Memory Controller Hub (rev 07) 00:02.0 VGA compatible controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07) 00:02.1 Display controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07) 00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 03) 00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 03) 00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 03) 00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 03) 00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 03) 00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 03) 00:1c.2 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 3 (rev 03) 00:1c.3 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 4 (rev 03) 00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03) 00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03) 00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03) 00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03) 00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 93) 00:1f.0 ISA bridge: Intel Corporation ICH9M LPC Interface Controller (rev 03) 00:1f.2 SATA controller: Intel Corporation ICH9M/ME SATA AHCI Controller (rev 03) 00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 03) 02:00.0 Ethernet controller: Atheros Communications Inc. AR242x / AR542x Wireless Network Adapter (PCI-Express) (rev 01) 06:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8057 PCI-E Gigabit Ethernet Controller (rev 10)
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, "рд╕рд╣реА" рдбрд┐рд╡рд╛рдЗрд╕ "00: 02.0 рд╡реАрдЬреАрдП рд╕рдВрдЧрдд рдирд┐рдпрдВрддреНрд░рдХ: рдЗрдВрдЯреЗрд▓ рдХреЙрд░реНрдкреЛрд░реЗрд╢рди рдореЛрдмрд╛рдЗрд▓ 4 рд╕реАрд░реАрдЬ рдЪрд┐рдкрд╕реЗрдЯ рдЗрдВрдЯреАрдЧреНрд░реЗрдЯреЗрдб рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ (рд░реЗрд╡ 07) рд╣реИред" рдЖрдк pci рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП setpci рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдореВрд▓ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдЪрд╛рд╣рд┐рдП:
рдЬрд╣рд╛рдБ
- рдорд╛рди - HEX рдореЗрдВ рдмреИрдХрд▓рд╛рдЗрдЯ рд╕реНрддрд░ рдХрд╛ рдорд╛рди (00..FF)
- s - рдХреБрдВрдЬреА рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ:
"[[[[]:]]:][][.[] ]".
-d []:[] ( lspci "-n")
! , . : Hot-Key-. C, \ " " .
:
"[[[[]:]]:][][.[] ]".
-d []:[] ( lspci "-n")
! , . : Hot-Key-. C, \ " " .
:
#include <stdio.h> #include <stdlib.h> #define DEVICEPATH "/sys/devices/pci0000:00/0000:00:02.0/config" // #define STEP 10 // int getLevel(void) { int current_level = -1; FILE *device_file = 0; device_file = fopen(DEVICEPATH,"rb"); if( 0 != device_file) { if( 0 == fseek(device_file,244,0) ) { current_level = fgetc(device_file); fclose(device_file); } } return current_level; } int ChangeLevel(const int value) { int functionResult = -1; if( (value > -1) && (value < 256) ) { FILE *device_file = 0; device_file = fopen(DEVICEPATH,"r+b"); if( 0 != device_file ) { if( 0 == fseek(device_file,244,0) ) { fputc(value,device_file); fclose(device_file); functionResult = 0; } } } else { printf("Error! Incorrect input value. Try 0..255\n"); } return functionResult; } int main(int argc, char * argv[]) { int current_level = 0; if( argc > 1 && argc < 3 ) { if( -1 != (current_level=getLevel()) ) { switch( *argv[1] ) { case 'u': if( current_level < ( 255 - STEP ) ) { if( -1 != ChangeLevel( current_level + STEP ) ) { printf("Ok, done\n"); } } else { printf("Error setting level\n"); } break; case 'd': if( current_level > (0+STEP) ) { if( -1 != ChangeLevel(current_level-STEP) ) { printf("Ok, done\n"); } } else { printf("Error setting level\n"); } break; case 'c' : printf("Current brightness level: %d\n",current_level); break; case 's': ChangeLevel(atoi(argv[2])); break; default: printf("Invalid arguments\n"); break; } } else { printf("Error checking brightness level\n"); } } else { printf("Arguments: [u|d|c|s <0..255>]\n"); printf("Usage:\nu - increase brightness by STEP value\n"); printf("d - decrease by STEP\n"); printf("c - show current level\n"); printf("s - set brightness to value 0..255.\n 0 - backlight off | 255 - maximum level\n"); } return 0; }
рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ:
gcc main.c -o bcontroller
рд░реВрдЯ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╕реЗрдЯ рдХрд░реЗрдВ:
chown root:root bcontroller chmod +s bcontroller
рдмрд┐рди рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЙрдкреА рдХрд░реЗрдВ:
cp ./bcontroller /usr/bin/bcontroller
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕реНрд░реЛрдд рдХреЛрдб рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рдпреВ - рдмреИрдХрд▓рд╛рдЗрдЯ рд╕реНрддрд░ рдХреЛ 1 рдХрджрдо рдмрдврд╝рд╛рдПрдВ
- d - рдмреИрдХрд▓рд╛рдЗрдЯ рд▓реЗрд╡рд▓ рдХреЛ 1 рд╕реНрдЯреЗрдк рдШрдЯрд╛рдПрдВред
- s - 0..255 рдХреА рд╕реАрдорд╛ рдореЗрдВ рдмреИрдХрд▓рд╛рдЗрдЯ рд╕реНрддрд░ рдХрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд░реЗрдВ
- c - рд╡рд░реНрддрдорд╛рди рдмреИрдХрд▓рд╛рдЗрдЯ рд╕реНрддрд░ рджреЗрдЦреЗрдВ
рдЬрдм рд╣рдордиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ / usr / bin рдкрд░ рдХреЙрдкреА рдХрд┐рдпрд╛, рддреЛ рдЙрд╕реЗ KDE4 рдореЗрдВ рд╣реЙрдЯ рдХреА рд╕реЗ рдмрд╛рдБрдзреЗрдВред рд╕рд┐рд╕реНрдЯрдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рдЬрд╛рдПрдВ -> рдХреНрд░рд┐рдпрд╛рдПрдБ, рдпрд╛ рд╡рд┐рдХрд▓реНрдк -> рдХреАрдмреЛрд░реНрдб рдФрд░ рдорд╛рдЙрд╕ -> рдХреАрдмреЛрд░реНрдб рд╢реЙрд░реНрдЯрдХрдЯ (рдпрд╛ рдореВрд▓ рдХреНрд░рд┐рдпрд╛рдПрдВ)ред рд╣рдо рдЙрд╕ рдШрдЯрдХ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдмреИрдХрд▓рд╛рдЗрдЯ рд╕реНрддрд░ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ: bcontroller u
ред рдЗрд╕реА рддрд░рд╣, рдЖрдк рдмреИрдХрд▓рд╛рдЗрдЯ рдкрд░ рдХрдо рдХрд░рдиреЗ, рдмрдВрдж рдХрд░рдиреЗ / рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред GNOME рдореЗрдВ, рдЖрдк рд╕рд┐рд╕реНрдЯрдо -> рдкреНрд░рд╛рдердорд┐рдХрддрд╛ -> рдХреАрдмреЛрд░реНрдб рд╢реЙрд░реНрдЯрдХрдЯ -> рдРрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╣ рд╕рдм рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреЙрдк-рдЕрдк рдореЗрдиреВ рдореЗрдВ, рдХрдорд╛рдВрдб рдФрд░ рд╣реЙрдЯ рдХреАрдЬ рдЬреЛрдбрд╝реЗрдВред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдмрдЧ, рдиреНрдпреВрдбрд╛ рдлрд┐рдХреНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдПрд╕ рдзрдиреНрдпрд╡рд╛рдж