เปลี่ยนพฤติกรรมการ blanking หน้าจอคอนโซล Linux


38

ฉันจะเปลี่ยนพฤติกรรมการเว้นว่างหน้าจอบนเทอร์มินัลเสมือน Linux ได้อย่างไร

ตัวอย่างเช่นถ้าฉันเปลี่ยนเป็น VT จาก X เข้าสู่ระบบและออกจากระบบเพียงอย่างเดียวเป็นเวลา 5 นาทีหรือมากกว่านั้นหน้าจอจะว่างเปล่าเหมือนสกรีนเซฟเวอร์ มันกลับมาพร้อมกับปุ่มกดเช่นสกรีนเซฟเวอร์

ส่วนใหญ่ฉันแค่ต้องการเปลี่ยนการหมดเวลา แต่ฉันยังสนใจในการตั้งค่าอื่น ๆ

หากมีสิ่งใดสิ่งหนึ่งระบบของฉันกำลังใช้งาน Ubuntu 10.04 พร้อมกับไดร์เวอร์กราฟิกหุ้น fbsetแสดงคอนโซลโดยใช้radeondrmfbอุปกรณ์ framebuffer


2
หวังว่านี่จะช่วยคุณได้ฉันพบสิ่งนี้เมื่อฉันพบคำถามเดียวกันaskubuntu.com/questions/138918/…

คำตอบ:


42

settermจากคำตอบของ @ whitequarkเป็นเครื่องมือ userspace ที่เหมาะสม แต่มันไม่ได้เป็นเรื่องราวทั้งหมด

พฤติกรรมการลบล้างคอนโซลเริ่มต้นถูกอบเข้าในเคอร์เนลในเวลารวบรวม มันเป็นที่กำหนดในเวลาบูตกับ paramater consoleblank =หรือใน userspace settermกับ จากเอกสารเกี่ยวกับเคอร์เนล ( kernel-parameters.txt ):

consoleblank=  [KNL] The console blank (screen saver) timeout in
               seconds. Defaults to 10*60 = 10mins. A value of 0
               disables the blank timer.

นี่คือตัวเลือกค่าเริ่มต้นของพวกเขาในระบบ Ubuntu ของฉันและอิทธิพล:

  • setterm -blank [0-60]; รายงาน 0 เสมอเมื่อมีการสอบถาม; มีประสิทธิภาพเมื่อทำงานบน VT จริง ส่งผลกระทบกับ TTY จริงทั้งหมด ไม่มีประสิทธิภาพเมื่อเรียกใช้ในเซสชันหน้าจอใน VT
  • setterm -powerdown [0-60]; รายงาน "3]" เสมอ (??); ดูเหมือนจะไม่มีผลใด ๆ เคอร์เนลของ Ubuntu ไม่เปิดใช้งานAPM_DISPLAY_BLANKและอาจเกี่ยวข้องกัน
  • consoleblank=N; ค่าเริ่มต้นถึง 600 (10 นาที); ส่งผลต่อ VT จริงทั้งหมด ส่งผลกระทบต่อเซสชันของหน้าจอใน VT ไม่มีวิธีตั้งค่าขณะใช้งาน

ดังนั้นตัวเลือกของฉันสำหรับการเปลี่ยนค่าเริ่มต้นเป็นหนึ่งในสิ่งต่อไปนี้:

  1. เพิ่มsetterm -blank X(X เป็นนาที 0 เพื่อปิดใช้งาน) ลงในไฟล์เชลล์ init เช่น. bashrc
  2. เพิ่มsetterm -blank Xการ/etc/rc.local
  3. เพิ่มconsoleblank=Y(Y ในไม่กี่วินาที, 0 เพื่อปิดการใช้งาน) เพื่อ commandline เคอร์เนลโดยเพิ่มไปยังรายการพารามิเตอร์ใน/ etc / default / ด้วงทั้งGRUB_CMDLINE_LINUXหรือGRUB_CMDLINE_LINUX_DEFAULT (อย่าลืมupdate-grub)

4
ฉันต้องการที่จะทราบว่าsetterm -blank Xมันไม่ได้ผลสำหรับฉันจากภายในtmuxแต่ทำงานได้อย่างสมบูรณ์เมื่อฉันออกจากtmuxก่อนที่จะรันคำสั่ง
Cody Hess

1
หากคุณกำลังใช้ grub2 เป็น bootloader คุณสามารถเพิ่มนี้เคอร์เนลพารามิเตอร์ใน / etc / default / ด้วงแล้วอัปเดตการตั้งค่าของคุณกับด้วงGRUB_CMDLINE_LINUX_DEFAULT="consoleblank=0" grub[2]-mkconfig -o /boot/grub/grub.cfg
user3132194

3]สำหรับsetterm -powerdownเป็นเพียงครึ่งหนึ่งจริง: ผลตอบแทนsetterm -powerdown 3 | hexdump -c 033 [ 1 4 ; 3 ]ไม่แน่ใจว่าควร interprete ลำดับการหลบหนีนี้อย่างไร
Daniel Alder

1
ตัวเลือกเหล่านี้บางตัวอาจใช้งานไม่ได้ทั้งนี้ขึ้นอยู่กับการกระจายของคุณและตำแหน่งที่คุณต้องการให้การเปลี่ยนแปลงมีผล ฉันพบว่า setterm ใน rc.local ใช้งานได้ดีสำหรับ RHEL 5 และ 6 แต่ไม่ใช่ 7
David C.

9

ลองsetterm -blank $minutes(หรือผ่าน 0 เพื่อปิดการใช้งาน); -powersaveตัวเลือกอาจเกี่ยวข้อง settermมีตัวเลือกที่มีประโยชน์อื่น ๆ อีกมากมายเช่นกัน

หากคุณต้องการตั้งค่าคุณสมบัติเหล่านี้ในการเริ่มต้นระบบพิจารณาเขียน initscript นี่เป็นเพียงสคริปต์ที่อยู่ใน/etc/init.dไดเรกทอรี ให้มันถูกเรียกว่าsetterm:

#!/bin/sh
[ "$1" == "start" ] || exit 0 # only initialize everything when called as /etc/init.d/setterm start
for term in /dev/tty[0-9]*; do # select all ttyNN, but skip ttyS*
    setterm -blank 0 >$term <$term
    setterm -powersave off >$term <$term
done

จากนั้นทำให้ปฏิบัติได้:

# chmod +x /etc/init.d/setterm

และสุดท้ายสร้าง /etc/rcX.d symlinks (วิธี Debian):

# update-rc.d setterm defaults

(หากคุณรู้สึกเบื่อกับพฤติกรรม# update-rc.d -f setterm removeนั้นโปรดสังเกตว่า-fต้องเป็นอาร์กิวเมนต์แรก)


การบริหารทรัพยากรมนุษย์ ดูเหมือนว่าจะมีประโยชน์สำหรับการบิน แต่ดูเหมือนว่าในระบบทดสอบ Ubuntu ของฉันมันเป็นจริงการ-powerdownตั้งค่าที่มีผลบังคับใช้ สิ่งที่เกี่ยวกับการตั้งค่าเริ่มต้นทั้งระบบเริ่มต้น? ทำงานsetterm -blank Xหรือsetterm -powerdown Yอยู่ใน/etc/rc.local (หรือ~ / .bashrc ) สมเหตุสมผลหรือไม่
ต้มตุ๋น quixote

1
ใช่ แต่ถ้าrc.localใช้งานได้จริง (การupstartโยกย้ายเมื่อเร็ว ๆ นี้ทำให้บางสิ่งบางอย่างผ่านไปอย่างเห็นได้ชัดและมีอยู่ในระบบของฉัน) มิฉะนั้นคุณควรสร้าง initscript เป็นเรื่องง่าย: ในกรณีของเราจะต้องเริ่มต้นทุกอย่างเมื่อผ่านการstartโต้แย้งครั้งแรกและไม่ทำอะไรเป็นอย่างอื่น ฉันจะอธิบายในคำตอบของฉัน
whitequark

setterm -blank X >/dev/ttyNดูเหมือนว่าคำสั่งจะไม่ทำงานดังนั้นฉันจึงไม่คิดว่าแนวคิด initscript จะใช้งานได้ วิ่งข้ามพารามิเตอร์บูทเวลาทำงานและทำการวิจัยเพิ่มเติม ฉันดูเหมือนจะผิดเกี่ยวกับ-powerdownและ-powersave; ยังไม่ได้ทดสอบอย่างสมบูรณ์ แต่สิ่งเหล่านั้นไม่ทำงานในระบบของฉัน setterm -blank Xทำงานได้จาก VT จริงเท่านั้นและส่งผลต่อ VT ทั้งหมดดังนั้นการเรียกใช้ครั้งเดียวผ่าน/etc/rc.localนั้นสมเหตุสมผล (การพุ่งพรวดไม่ได้นำrc.localไปใช้เพียงแค่ไฟล์/etc/rcX.d )
quack quixote

1
เสียงกระแอม ดูเหมือนว่าsettermจะปล่อย escape sequences on stdoutแต่ตรวจสอบชนิด TTY ด้วยstdin: ฉันเพิ่งตรวจสอบและsetterm ... >/dev/ttyN </dev/ttyNทำงานตามที่ตั้งใจไว้
whitequark

มันสมเหตุสมผลและมันใช้งานได้ (จาก TTY จริง) แต่ประเด็นของการใช้ไวยากรณ์นั้นคืออะไร? (1) ยังใช้งานไม่ได้จากภายในหน้าจอ (หรือ PTY อื่น ๆ ) ซึ่งเป็นที่ที่การระบุ / dev / ttyN จะเป็นประโยชน์ (2) การตั้งค่าหนึ่ง VT มีผลกับทุกคนดังนั้นไม่จำเป็นต้องใช้ initscript loop
ต้มตุ๋น quixote

3

หากใครกำลังมองหาโซลูชันที่เป็นไปได้สำหรับ Debian (อาจไม่ใช่ Ubuntu):

ใน/etc/kbd/configมองหาการตั้งค่าที่เรียกว่า "BLANK_TIME":

# screen blanking timeout.  monitor remains on, but the screen is cleared to
# range: 0-60 min (0==never)  kernels I've looked at default to 10 minutes.
# (see linux/drivers/char/console.c)
BLANK_TIME=30

เปลี่ยนเป็น 0 สิ่งนี้จะปิดใช้งาน:

BLANK_TIME=0

ทดสอบกับ Debian 6 และ 7


2

หากคุณใช้ Ubuntu รุ่นใหม่ที่ใช้งานระดับสูงกว่าปกติคุณสามารถใช้:

for file in /etc/init/tty*.conf; do tty="/dev/`basename $file .conf`"; echo "post-start exec setterm -blank 0 -powersave off >$tty <$tty" | sudo tee -a "$file"; done

คำอธิบายเล็กน้อยเกี่ยวกับสิ่งที่เกิดขึ้นที่นี่:

เวอร์ชันใหม่ของ Ubuntu ใช้ upstart สำหรับการเริ่มต้นระบบ ด้วยการพุ่งพรวดคอนโซลลินุกซ์จะถูกตั้งค่าด้วยไฟล์กำหนดค่าที่เก็บไว้ภายใน / etc / init คำสั่งด้านบนเริ่มต้นด้วยการวนซ้ำไฟล์กำหนดค่าแต่ละไฟล์:

for file in /etc/init/tty*.conf;

ชื่อไฟล์ config upstart ใน $ file ถูกใช้เพื่อสร้างชื่อของอุปกรณ์ tty:

tty="/dev/`basename $file .conf`";

คำสั่งพุ่งพรวด "post-start" ถูกสร้างขึ้นเพื่อรัน "setterm" เพื่อปิดใช้งานการว่างหน้าจอและการประหยัดพลังงานหลังจาก tty เริ่มทำงานแล้ว:

echo "post-start exec setterm -blank 0 -powersave off >$tty <$tty"

และในที่สุดคำสั่งนั้นจะถูกผนวกเข้ากับไฟล์ config upstart:

| sudo tee -a "$file";

2

ในระบบของฉัน (RedHat Enterprise Linux รุ่นต่างๆ) ฉันพบว่าจำเป็นต้องใช้วิธีการที่แตกต่างกัน

สำหรับระบบ RHEL 5 และ 6 ของฉันฉันสามารถเพิ่มบรรทัดได้

/bin/setterm -blank 0 -powerdown 0 -powersave off

/etc/rc.localไปยัง สิ่งนี้ปิดใช้งานหน้าจอคอนโซล blanking เมื่อเริ่มต้นระบบ

ฉันพบว่าสิ่งนี้ไม่ทำงานบนระบบ RHEL 7 บน RHEL7 การรัน setterm จาก rc.local ทำให้เกิดข้อผิดพลาดที่จะสร้าง:

setterm: $TERM is not defined.

คำสั่งทำงานจากเชลล์เชิงโต้ตอบที่กำหนด $ TERM (as linux) ถ้าฉันบังคับให้ setterm ใช้:

/bin/setterm -term linux -blank 0 -powerdown 0 -powersave off

จากนั้นฉันได้รับข้อผิดพลาดอื่น:

setterm: cannot (un)set powersave mode: Inappropriate ioctl for device

แม้ว่าคำสั่งเดียวกันจะทำงานได้ดีจากเซสชันแบบโต้ตอบ การตั้งค่าconsoleblankพารามิเตอร์เคอร์เนลทำงาน

บน RHEL7 ให้แก้ไข/etc/default/grubและผนวกconsoleblank=0เข้ากับGRUB_CMDLINE_LINUXพารามิเตอร์ จากนั้นเรียกใช้grub2-mkconfig -o /boot/grub2/grub.cfgและรีบูต

ฉันไม่ได้ลองตั้งค่าconsoleblankใน RHEL5 หรือ 6


2
RHEL7 ใช้ systemd; rc.local ไม่ได้เชื่อมต่อกับเทอร์มินัลโดยค่าเริ่มต้น ฉันคิดว่าคุณสามารถเพิ่ม</dev/tty1 >/dev/tty1หรือบางสิ่งบางอย่างเพื่อให้มันทำงาน
sourcejedi

1

ลำดับ CSI ส่วนตัวของคอนโซล Linux

ในการตั้งsleep mode/screensaverเวลาเข้า (โดยที่ X คือเวลาเป็นนาที; 0 = ไม่เลย):

(จากคอนโซลอนุกรม)

echo -e '\033[9;X]' > /dev/tty1    

หรือ (จากคอนโซล framebuffer)

echo -e '\033[9;X]'    

หรือหากต้องการตั้งไว้ที่การบู๊ตแต่ละครั้งให้ใช้/etc/inittab:

tty1::sysinit:echo -e '\033[9;X]'

refs:


0

การเพิ่มไฟล์gnome-screensaver-command --exitของฉัน.profileแก้ไขปัญหานี้ให้ฉันบน Debian Linux (Wheezy)

คิดว่าฉันจะเพิ่มสิ่งนี้เพื่อช่วยให้คนอื่น ๆ ที่กำลังดึงผมออกมาพยายามที่จะหยุดการทำให้หน้าจอว่าง

ช่องทำเครื่องหมายที่ชื่อ"หน้าจอ Dim เพื่อประหยัดพลังงาน"ทำงานผิดปกติ แม้จะไม่ได้ทำเครื่องหมายมันก็จะว่างหน้าจอตามเวลาที่ไม่มีกิจกรรมที่เลือก

UPDATE: ฉันต้องการsleep 30 && /usr/bin/gnome-screensaver-command --exit &ทำให้มันทำงานอย่างถูกต้อง โปรแกรมรักษาหน้าจอของ GNOME ดูเหมือนจะเริ่มต้นหลังจากที่. profile ได้รับการประมวลผลแล้ว


2
นี่เป็นเรื่องเกี่ยวกับการล้างหน้าจอคอนโซลไม่ใช่หน้าจอ Gnome
basic6 6
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.