วิธีการเปลี่ยนความสว่างของจอแอลซีดีจากบรรทัดคำสั่ง (หรือผ่านสคริปต์)


162

เพื่อแก้ไขข้อผิดพลาด # 1005495 (การเปลี่ยนความสว่างของจอแอลซีดีผ่านฮอตคีย์เป็นไปไม่ได้) ฉันต้องการให้มีคิวรี่บรรทัดคำสั่งหนึ่งคำเพื่อเพิ่มและอีกอันสำหรับลดความสว่างของจอแอลซีดีของฉัน จากนั้นฉันสามารถจับคู่คีย์ลัดกับแบบสอบถามนี้

ปัญหาคือ: ฉันไม่รู้วิธีเพิ่มและลดความสว่างของ LCD ในบรรทัดคำสั่ง คุณ


1
มีความเป็นไปได้ที่ซ้ำกันของไม่สามารถเปลี่ยนความสว่างในแล็ปท็อป Lenovo
Lekensteyn

2
ขอบคุณ Lekensteyn แต่มันไม่ซ้ำกันตั้งแต่ lsmod | grep ^ i915 ไม่ส่งออกให้ฉัน (ดูวิธีแก้ปัญหาที่ยอมรับ) ยังคงมองหาวิธีการแก้ปัญหา
user69748

คำตอบ:


157

อีกวิธีหนึ่งที่เราต้องทำคือเปิดโปรแกรมใหม่ชื่อ xbacklight เปิดเทอร์มินัลแล้วพิมพ์

sudo apt-get install xbacklight

จากนั้นพิมพ์สิ่งนี้ xbacklight -set 50

50 หมายถึงช่วงความสว่างเราสามารถรับได้มากถึง 100 จาก 0

คุณสามารถเพิ่มและลดความสว่างจากมูลค่าปัจจุบันเป็นระดับที่ระบุเช่นที่คุณกล่าวถึงหากคุณต้องการเพิ่มเป็น 10% จากมูลค่าปัจจุบันของความสว่างจากนั้นคุณสามารถให้สิ่งนี้

xbacklight -inc 10

และเพื่อลด 10% คุณสามารถให้สิ่งนี้

xbacklight -dec 10 

คำเตือน : xbacklightใช้งานได้กับ Intel เท่านั้นไม่เหมาะกับ Radeon และไม่เหมาะกับไดรฟ์เวอร์การตั้งค่าโหมด ( แหล่งที่มา )


ดูเหมือนคำสั่งง่าย ๆ แต่สิ่งที่ฉันต้องการก็คือ xbacklight - เพิ่ม 10 เพื่อเพิ่มความสว่าง 10 เปอร์เซ็นต์ เป็นไปได้เช่นกัน?
69748

1
ใช่คุณสามารถ. ฉันได้พูดไปแล้ว เพื่อให้คุณสามารถได้รับว่าโดย xbacklight -inc 10
rɑːdʒɑ

1
ตกลงตอนนี้มันเป็นคำตอบของคุณ ขอบคุณมากฉันจะลองดู
user69748

34
มันดูเรียบง่าย แต่น่าเสียดายที่มันไม่ได้ผลสำหรับฉัน ความสว่างไม่เปลี่ยนไม่ได้กับ -dec และไม่ใช่กับ -set ฉันเดาว่าฉันจะต้องหวังว่าข้อผิดพลาดจะได้รับการแก้ไขได้ตลอดเวลาเร็ว ๆ นี้ ขอบคุณอย่างไรก็ตาม
69748

1
นอกจากนี้ยังมีการจดชวเลขคุณสามารถใช้: xbacklight +10; xbacklight -10; xbacklight =50;
Fordi

149

เปิดเทอร์มินัลของคุณและพิมพ์สิ่งนี้

xrandr -q | grep " connected"

มันจะให้ผลลัพธ์เป็น

LVDS1 connected 1680x1050+0+0 (normal left inverted right x axis y axis) 331mm x 207mm

มี LVDS1 แทนจอแสดงผลของคุณ ดังนั้นตอนนี้คุณต้องทำตาม

xrandr --output LVDS1 --brightness 0.5

0.5 หมายถึงระดับความสว่างและอยู่ในช่วงตั้งแต่ 0.0 ถึง 1.0 0.0 -> สีดำเต็มดังนั้นคุณต้องเลือกค่าความสว่างที่ต้องการ

นี้ไม่ได้เปลี่ยนแปลงความสว่างในระดับฮาร์ดแวร์ จากrandrคู่มือ :

--brightness brightnessคูณค่าแกมมาบน crtc ที่ต่อกับเอาท์พุทเป็นค่าลอยตัวที่ระบุ มีประโยชน์สำหรับเอาต์พุตที่สว่างมากหรือมืดเกินไป อย่างไรก็ตามนี่เป็นการแก้ไขซอฟต์แวร์เท่านั้นหากฮาร์ดแวร์ของคุณรองรับการเปลี่ยนความสว่างได้จริงคุณอาจต้องการใช้ xbacklight


2
ขอบคุณสำหรับคำตอบที่คุณต้องการ แต่สิ่งที่ฉันต้องการคือบางสิ่งเช่น xrandr - เพิ่ม 10 เพื่อเพิ่มความสว่าง 10 เปอร์เซ็นต์ เป็นไปได้เช่นกัน?
user69748

48
ดูเหมือนจะไม่เปลี่ยนความสว่างในระดับฮาร์ดแวร์
erjoalgo

12
น่าเสียดายที่คำตอบนี้ได้รับการโหวตมากมาย หน้าจอแล็ปท็อปของฉัน "เลียนแบบ" ความมืดดังนั้นจะพูดโดยทำให้สิ่งต่างๆดูมืดลง (เช่นเมื่อคุณเล่นวิดีโอที่มีฉากกลางคืนที่ไม่มีอะไรเกี่ยวข้องกับความสว่างของหน้าจอ แต่มีพิกเซลปิดบังแสงพื้นหลัง) ความสว่างนั้นเหมือนกันหมดสิ้นเปลืองแบตเตอรี่มากกว่าเดิมเพราะพิกเซลมากกว่านี้มืดกว่า
Mephisto

2
ขอบคุณมันช่วยทั้งวันและดวงตาของฉันด้วยเช่นกัน :) :)
Shylendra Madda

7
ทำให้ความสว่างนั้นปลอม ความสว่างไม่เปลี่ยนแปลงมันถูกสร้างโดยซอฟต์แวร์
user1970939

109

งานต่อไปนี้สำหรับฉัน:

echo 400 | sudo tee /sys/class/backlight/intel_backlight/brightness

ฉันเดาว่าค่าที่เป็นไปได้สูงสุดคือใน/sys/class/backlight/intel_backlight/max_brightnessไฟล์

แทนที่intel_backlightด้วยเครื่องหมายดอกจันเพื่อใช้กับไฟส่องด้านหลังทั้งหมด


16
@Ray echo 400 | sudo tee /sys/class/backlight/intel_backlight/brightnessลองนี้:
Mygod

10
@Ray เมื่อคุณทำการsudo echo 400 > /sys/class . .. ./brightnessเปลี่ยนเส้นทางจะทำโดยเชลล์ไม่ใช่โดย echo และเชลล์ยังคงทำงานในฐานะผู้ใช้ปกติของคุณไม่ใช่ sudo นั่นเป็นสาเหตุที่ทำให้การอนุญาตถูกปฏิเสธ คุณต้องมียูทิลิตี้ที่จะเขียนไปยังไฟล์ที่มีสิทธิ์ใช้งานรูทซึ่งเป็นสาเหตุที่ใช้teeงานได้
Sergiy Kolodyazhnyy

4
echo 400 | sudo tee /sys/class/backlight/radeon_bl0/brightnessสำหรับ APUs ของ Radeon และการ์ด
Suici Doga

13
นี่เป็นระดับต่ำอย่างน่าขัน แต่ในความเป็นจริงดูเหมือนจะเป็นสิ่งเดียวที่ทำงานได้อย่างน่าเชื่อถือ มันน่าเกลียดน้อยลงถ้าคุณsudo chmod 0646ใช้brightnessไฟล์ดังนั้นจึงsudoไม่จำเป็นสำหรับการตั้งค่าความสว่างอีกต่อไป
leftaroundabout

7
เหตุผลที่กำหนดไว้ในการอนุญาต su คือไวรัสอาจทำให้หน้าจอของคุณมืดลงและสว่างขึ้นอย่างไม่น่าเชื่อในที่สุดด้วยความเร็วที่เหลือเชื่อจนทำให้จอแสดงผลฮาร์ดแวร์ของคุณเสียหาย ในยุค 90 ฉันพบไวรัสที่จะปรับการรีเฟรชหน้าจอ Hertz อย่างรวดเร็วจนจอภาพของคุณจะทอด ดังนั้นโปรดใช้ความระมัดระวังในการปรับแต่งนี้
RyanNerd

12

สำหรับแล็ปท็อป

sudo setpci -s 00:02.0 F4.B=80

เปลี่ยน80โดย[0-FF]จะได้รับต่ำสุดสูงสุดสว่าง ค่าที่ระบุเป็นเลขฐานสิบหกดังนั้น80จะให้50%ความสว่างสูงสุดแก่คุณ

สำหรับเดสก์ท็อปที่ทำการแก้ไขแกมมา (ไม่ทดสอบโดยฉัน)

xgamma -gamma .75

ขอบคุณสำหรับคำตอบที่คุณต้องการ แต่สิ่งที่ฉันต้องการคือ setpci - เพิ่ม 10 เพื่อเพิ่มความสว่าง 10 เปอร์เซ็นต์ เป็นไปได้เช่นกัน?
user69748

ขอบคุณสำหรับคำตอบนี้มันเป็นเรื่องดีที่ได้ทราบว่าสิ่งต่าง ๆ จะทำในระดับที่ต่ำกว่าอย่างไร
erjoalgo

1
นี่เป็นคำตอบเดียวที่ทำงานกับฉันใน Samsung NB30 Plus
OSE

ฉันดูเหมือนจะไม่สามารถใช้งานได้ .. ฉันควรเปลี่ยนพารามิเตอร์บางอย่างบางทีและถ้าเป็นเช่นนั้นฉันจะหาค่าที่เหมาะสมได้อย่างไร
Rasmus

ขอบคุณฉันใช้แล็ปท็อปใช้setpciงานxgammaไม่ได้
Philip Kirkbride

4

ลองในเทอร์มินัล:

xrandr --output LVDS1 --brightness 0.9

คุณสามารถเปลี่ยนค่าสุดท้ายตามที่คุณต้องการเช่น 0.2


1
1) เอาต์พุตไม่ได้เป็น LVDS1 เสมอไป แต่ผู้ใช้สามารถค้นหาด้วย xrandr --verbose 2) ไม่เปลี่ยนความเข้มของแบ็คไลท์
erjoalgo

4

ทำสคริปต์นี้:

set-brightness.sh

#!/bin/bash
TARGET="acpi_video0"
cd /sys/class/backlight
MAX="$(cat "${TARGET}/max_brightness")"
# The `/1` at the end forced bc to cast the result 
# to an integer, even if $1 is a float (which it 
# should be)
LOGIC="$(echo "($1 * ${MAX})/1" | bc)"
for i in */; do
    if [[ "${TARGET}/" != "$i" && -e "${i}brightness" ]]; then
        cat "${i}max_brightness" > "${i}brightness"
    fi
done
echo "$LOGIC" > "${TARGET}/brightness"

รันเป็น root โดยมีค่าใด ๆ ระหว่าง 0 ถึง 1

sudo ./set-brightness.sh 0.5
  • หากระบบของคุณไม่มี/sys/class/backlight/acpi_video0ควรมีอย่างน้อยหนึ่งไดเรกทอรีในนั้นซึ่งอาจเป็นเฉพาะอุปกรณ์ (ฉันยังมีradeon_bl0ตัวอย่างเช่น)
  • หากคุณมีคนอื่น ๆ โปรดจำไว้ว่าค่าของสแต็กเหล่านั้น (ดังนั้นวนซ้ำผลักค่าอื่นทั้งหมดเป็น1.0 จากนั้นตั้งค่าเป้าหมายหนึ่งให้เป็นจำนวนที่ต้องการ)
  • ในขณะที่acpi_video0 ควรทำงานเสมอมันไม่ได้มีความสว่างทางกายภาพอย่างเต็มรูปแบบ ลองแต่ละอันและใช้อันที่มีช่วงเสียงที่ใหญ่ที่สุดเป็น "เป้าหมาย" ของคุณ

2
ลองใช้/sys/class/backlight/*/brightnessแทนการพยายามเขียนโค้ดacpi_video0ลงในสคริปต์ มันจะช่วยให้การ generalizing เส้นทางไปยังแฟ้มซึ่งอาจจะแตกต่างกัน - ผมยกตัวอย่างเช่นมีไม่intel_backlight acpi_video0นั่นคือสิ่งที่ฉันใช้ในสคริปต์
Sergiy Kolodyazhnyy

4

ใช้ DBus กับ Gnome

ขั้นตอนในการปรับความสว่างสำหรับการควบคุมคีย์บอร์ดสามารถทำได้ด้วยวิธีนี้เช่นกัน

# Step up:
gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.Screen.StepUp

# Step down:
gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.Screen.StepDown

หมายเหตุ


+1 ยืนยันว่าใช้งานได้ดีบนหน้าจอ LCD ภายใน ไม่มีผลกับจอภาพภายนอกที่ควบคุมด้วยxrandrแกมม่าและสคริปต์ความสว่าง
WinEunuuchs2Unix

3

อย่างที่ @palacsint พูดว่ามันecho 244 > /sys/class/backlight/intel_backlight/brightnessทำงานได้ดีสำหรับฉัน

แต่ค่าสูงสุดและต่ำสุดจะส่งใหม่/sys/class/backlight/intel_backlight/max_brightnessและ/sys/class/backlight/intel_backlight/bl_powerไฟล์ตามลำดับ

นอกจากนี้ความสว่างที่แท้จริงของคอมพิวเตอร์ของคุณทำงานอยู่ก็ปรากฏขึ้น /sys/class/backlight/intel_backlight/actual_brightness


3

KDE 4.12:

qdbus org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement/Actions/BrightnessControl setBrightness 55

เวอร์ชั่น KDE Plasma: 5.14.3:

รหัสข้างต้นยังคงใช้ได้ มันจะทำงานได้ก็ต่อเมื่อคุณเป็นผู้ใช้ KDE อย่างไรก็ตามในกรณีนี้จะไม่จำเป็นต้องมีซอฟต์แวร์เพิ่มเติม มันจะมีพฤติกรรมเหมือนกับที่แน่นอนเมื่อใช้วิดเจ็ต "แบตเตอรี่และความสว่าง" AFAIK จะเปลี่ยนแสงพื้นหลังทางกายภาพซึ่งตรงกันข้ามกับxrandrที่ไม่ได้

ระวังว่า 55 ข้างต้นไม่ใช่เศษส่วนของ 100 ส่วนหลังเป็นความสว่างสูงสุด แต่เกี่ยวข้องกับ max_brightness:

qdbus org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement/Actions/BrightnessControl brightnessMax

นอกจากนี้ยังมีรุ่น "เงียบ" ที่คุณอาจชอบในสคริปต์:

qdbus org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement/Actions/BrightnessControl setBrightnessSilent 2000

อ้างอิง: qdbus , ทึบ , ความสว่าง


คุณอธิบายได้ไหมว่ามันจะทำอะไร?
rɑːdʒɑ

2

นี่คือบรรทัดสั้น ๆ ที่สามารถช่วยให้คุณผ่อนคลายสายตา เพียงแค่สร้าง crontaab ด้วยบรรทัดหรือสร้างสคริปต์

xrandr --output VGA1 --brightness 0.5; sleep 20; xrandr --output VGA1 --brightness 1

2

ด้วยการใช้คำตอบข้างต้นฉันสร้างสคริปต์นี้ (บันทึกไว้ในโฮมไดเร็กตอรี่ของฉันเป็น illumin.sh) เพื่อแก้ไขความสว่างของจอแสดงผล (เนื่องจากคีย์บอร์ดของแล็ปท็อปประสบปัญหาชารั่วไหล อย่าลังเลที่จะใช้มัน (หากคุณมีไฟล์ที่กำหนด ... มิฉะนั้นการเปิดใช้งานการชี้ไปที่รูปแบบของไฟล์เหล่านั้นจะเป็นสิ่งจำเป็น)

#!/bin/bash
function main_menu
{
    sudo clear
    cursetting=$(cat /sys/class/backlight/intel_backlight/brightness)
    maxsetting=$(cat /sys/class/backlight/intel_backlight/max_brightness)
    powersave=$((maxsetting/5))
    conservative=$((powersave*2))
    medium=$((powersave*3))
    performance=$((powersave*4))
    echo ""
    echo "----------------------- Brightness -----------------------"
    echo " 1. Set Display to Minimum (Powersave) brightness setting."
    echo " 2. Set Display to Low (Conservative) brightness setting."
    echo " 3. Set Display to Medium brightness setting."
    echo " 4. Set Display to High (Performance) brightness setting."
    echo " 5. Set Display to Maximum brightness setting."
    echo " 6. Exit."
    echo "----------------------------------------------------------"
    if [ $cursetting -eq $powersave ]; then
     cursetting='Minimum'
    else
     if [ $cursetting -eq $conservative ]; then
      cursetting='Conservative'
     else
      if [ $cursetting -eq $medium ]; then
       cursetting='Medium'
      else
       if [ $cursetting -eq $performance ]; then
        cursetting='Performance'
       else
        if [ $cursetting -eq $maxsetting ]; then
         cursetting='Maximum'
        fi
       fi
      fi
     fi
    fi
    echo "        Current Display Setting - "$cursetting;
    choice=7
    echo ""
    echo -e "Please enter your choice: \c"
}

function press_enter
{
    echo ""
    echo -n "Press Enter to continue."
    read
    main_menu
}

main_menu
while [ $choice -eq 7 ]; do
read choice

if [ $choice -eq 1 ]; then
 echo $powersave | sudo tee /sys/class/backlight/intel_backlight/brightness
 main_menu
else
 if [ $choice -eq 2 ]; then
  echo $conservative | sudo tee /sys/class/backlight/intel_backlight/brightness
  main_menu
 else
  if [ $choice -eq 3 ]; then
   echo $medium | sudo tee /sys/class/backlight/intel_backlight/brightness
   main_menu
  else
   if [ $choice -eq 4 ]; then
    echo $performance | sudo tee /sys/class/backlight/intel_backlight/brightness
    main_menu
   else
    if [ $choice -eq 5 ]; then
     echo $maxsetting | sudo tee /sys/class/backlight/intel_backlight/brightness
     main_menu
    else
     if [ $choice -eq 6 ]; then
      exit;
     else
      echo -e "Please enter the NUMBER of your choice: \c"
      choice = 7
     fi
    fi
   fi
  fi
 fi
fi
done

คุณสามารถทำดีกว่าเพียงแค่การทำรังจำนวนมากถ้าเงื่อนไขเหมือนหรือดียิ่งขึ้นelif caseนอกจากนี้ฉันขอแนะนำให้อ่านคู่มือสไตล์เช่นgoogle.github.io/styleguide/shell.xmlและลองใช้ linter เช่น shellcheck เพราะช่วยให้คุณสร้างโค้ดที่ดีขึ้น ฉันหวังว่าจะมีคนบอกฉันเมื่อฉันเริ่มเขียนสคริปต์เมื่อหลายปีก่อน :)
LiveWireBT

1

ddccontrolเป็นอีกทางเลือกหนึ่งสำหรับการควบคุมแบ็คไลท์สำหรับจอภาพภายนอก ที่นี่ฉันสามารถตั้งไฟแบ็คไลท์ของจอภาพภายนอกของฉันเป็น 50% ของพลังงานด้วย:

ddccontrol -p -r 0x10 -w 50

ผมมองในการแก้ปัญหาที่เป็นไปได้สำหรับปัญหานี้การปรับปรุงวิธีการRedshiftจัดการการเปลี่ยนแปลงความสว่าง ผ่านการมีผมพบว่ามีpatchset สำหรับลินุกซ์sysfsในการปรับปรุงการทำงานร่วมกันในอุปกรณ์เพื่อให้แล็ปท็อปและหน้าจอภายนอกสามารถทำงานในทำนองเดียวกันผ่าน

ในระหว่างนี้ ddccontrol เป็นสิ่งเดียวที่เหมาะกับฉันที่นี่ ตามปกติวิกิ Arch มีเอกสารโดยรวมที่ดีในหัวข้อนี้เช่นกัน


0

UI ที่เหมือนอินเทอร์แอคทีฟที่ใช้ xbacklight

ผู้ชายที่น่าสงสาร การเข้าชมhและลดลง 10% การเข้าชมlและเพิ่มขึ้น 10% จากนั้นแสดงความสว่างในปัจจุบัน

xback() (
  done=false;
  echo "less: h, more: l, quit: q"
  while ! $done; do
    read -rsn1 key
    if [ "$key" = h ]; then
      xbacklight -dec 10
    elif [ "$key" = l ]; then
      xbacklight -inc 10
    elif [ "$key" = q ]; then
      done=true
    fi
    printf "\r$(xbacklight -get) "
  done
)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.