Ubah perilaku blanking layar konsol Linux

38

Bagaimana cara mengubah perilaku pengosongan layar pada terminal virtual Linux?

Misalnya, jika saya beralih ke VT dari X, masuk, dan biarkan sistem sendiri selama 5 menit atau lebih, layar akan kosong seperti screensaver. Muncul kembali dengan penekanan tombol apa saja, seperti screensaver.

Sebagian besar saya hanya ingin mengubah batas waktu, tetapi saya juga tertarik dengan pengaturan lain.

Jika itu membantu, salah satu sistem saya menjalankan Ubuntu 10,04 dengan driver grafis stok. fbsetmemperlihatkan konsol menggunakan radeondrmfbperangkat framebuffer.

quack quixote
sumber
2
Semoga ini bisa membantu Anda, saya menemukan ini ketika saya bertemu dengan pertanyaan yang sama askubuntu.com/questions/138918/…

Jawaban:

42

settermdari @ whitequark jawaban adalah alat userspace yang masuk akal, tapi itu bukan keseluruhan cerita.

Perilaku blanking konsol default dimasukkan ke dalam kernel pada waktu kompilasi. Ini dapat dikonfigurasi pada saat boot dengan paramater consoleblank = , atau di userspace dengan setterm. Dari dokumentasi kernel ( kernel-parameter.txt ):

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

Berikut adalah opsi-opsi, default-nya pada sistem Ubuntu saya, dan lingkup pengaruhnya:

  • setterm -blank [0-60]; selalu melaporkan 0 saat ditanya; efektif saat dijalankan pada VT nyata; mempengaruhi semua TTY nyata; tidak efektif ketika dijalankan di sesi layar pada VT.
  • setterm -powerdown [0-60]; selalu melaporkan "3]" (??); tampaknya tidak berpengaruh. Kernel Ubuntu tidak mengaktifkan APM_DISPLAY_BLANK , dan ini bisa terkait.
  • consoleblank=N; default ke 600 (10 menit); mempengaruhi semua VT nyata; memengaruhi sesi layar dalam VT; tidak ada cara untuk mengatur saat menjalankan.

Jadi opsi saya untuk mengubah default adalah salah satu dari yang berikut:

  1. Tambahkan setterm -blank X(X dalam menit, 0 untuk menonaktifkan) ke file init shell seperti .bashrc .
  2. Tambahkan setterm -blank Xke /etc/rc.local .
  3. Tambahkan consoleblank=Y(Y dalam detik, 0 untuk menonaktifkan) ke commandline kernel dengan menambahkannya ke daftar parameter di / etc / default / grub , baik GRUB_CMDLINE_LINUX atau GRUB_CMDLINE_LINUX_DEFAULT . (Jangan lupa update-grub.)
quack quixote
sumber
4
Saya ingin mencatat bahwa setterm -blank Xitu tidak bekerja untuk saya dari dalam tmux , tetapi bekerja dengan sempurna ketika saya keluar dari tmux sebelum menjalankan perintah.
Cody Hess
1
Jika Anda menggunakan grub2 sebagai bootloader, Anda bisa menambahkan parameter kernel ini di / etc / default / grub GRUB_CMDLINE_LINUX_DEFAULT="consoleblank=0"dan kemudian perbarui konfigurasi grub Anda dengan grub[2]-mkconfig -o /boot/grub/grub.cfg.
user3132194
3]karena setterm -powerdownhanya setengah yang benar: setterm -powerdown 3 | hexdump -cpengembalian 033 [ 1 4 ; 3 ]. Tidak yakin apa yang harus menginterpretasikan urutan pelarian ini ...
Daniel Alder
1
Bergantung pada distribusi Anda dan di mana Anda ingin perubahan berlaku, beberapa opsi ini mungkin tidak berfungsi. Saya menemukan bahwa setterm di rc.local bekerja sangat baik untuk RHEL 5 dan 6, tetapi tidak 7.
David C.
9

Coba setterm -blank $minutes(atau lewati 0 untuk menonaktifkan); -powersaveopsi juga terkait. settermmemiliki banyak opsi bermanfaat lainnya juga.

Jika Anda ingin mengatur atribut ini pada startup sistem, pertimbangkan untuk menulis skrip init. Ini hanya skrip yang ditempatkan di /etc/init.ddirektori. Biarkan itu disebut 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

Kemudian buat itu bisa dieksekusi:

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

Dan akhirnya, buat symlinks /etc/rcX.d (cara Debian):

# update-rc.d setterm defaults

(Jika Anda bosan dengan perilaku itu, lakukan # update-rc.d -f setterm remove. Catat itu -fharus menjadi argumen pertama).

whitequark
sumber
hrm tampaknya berguna untuk on-the-fly, yang tampaknya pada pengujian sistem Ubuntu saya sebenarnya -powerdownpengaturan yang berlaku. bagaimana dengan pengaturan saat boot, standar seluruh sistem? apakah berjalan setterm -blank Xatau setterm -powerdown Ydi /etc/rc.local (atau ~ / .bashrc ) masuk akal?
quack quixote
1
Ya, tetapi hanya jika rc.localbenar-benar berfungsi. ( upstartMigrasi terbaru mengacaukan beberapa hal, karena tampaknya ada dan berfungsi pada sistem saya.) Jika tidak, Anda harus membuat skrip init. Itu mudah: dalam kasus kami, ia harus menginisialisasi segala sesuatu ketika startdinyatakan sebagai argumen pertama, dan tidak melakukan apa pun sebaliknya. Saya akan menjelaskannya dalam jawaban saya.
whitequark
perintah setterm -blank X >/dev/ttyNsepertinya tidak berfungsi, jadi saya tidak berpikir konsep skrip init akan berfungsi. berlari melintasi parameter boottime tho dan melakukan penelitian lebih lanjut. saya tampaknya salah tentang -powerdowndan -powersave; belum sepenuhnya diuji tetapi itu tidak bekerja pada sistem saya. setterm -blank Xberfungsi, hanya dari VT asli, dan memengaruhi semua VT, jadi menjalankan sekali melalui /etc/rc.local masuk akal. (Pemula tidak menghapus rc.local , hanya /etc/rcX.d stuff.)
quack quixote
1
Ahem. Tampaknya settermmemancarkan urutan melarikan diri stdout, tetapi memeriksa jenis TTY dengan stdin: Saya baru saja memeriksa, dan setterm ... >/dev/ttyN </dev/ttyNberfungsi sebagaimana dimaksud.
whitequark
itu masuk akal, dan itu bekerja (dari TTY nyata), tetapi apa gunanya menggunakan sintaks itu sama sekali? (1) masih tidak berfungsi dari dalam layar (atau berpotensi PTY lainnya), yang mana menentukan / dev / ttyN akan berguna; (2) pengaturan satu VT mempengaruhi semua, jadi tidak perlu untuk loop skrip init.
quack quixote
3

Jika ada yang mencari solusi lain yang mungkin untuk Debian (mungkin bukan Ubuntu):

Di /etc/kbd/config, cari pengaturan yang disebut "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

Ubah ke 0, ini akan menonaktifkannya:

BLANK_TIME=0

Diuji pada Debian 6 dan 7.

basic6
sumber
2

Jika Anda menjalankan Ubuntu yang lebih baru yang menggunakan pemula, Anda dapat menggunakan:

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

Sedikit penjelasan tentang apa yang terjadi di sini:

Versi Ubuntu yang lebih baru menggunakan pemula untuk startup sistem. Dengan pemula, konsol Linux disiapkan dengan file config disimpan di / etc / init. Perintah di atas dimulai dengan mengulangi masing-masing file konfigurasi:

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

Nama file konfigurasi pemula tty di $ file digunakan untuk membangun nama perangkat tty:

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

Perintah "pasca-mulai" pemula dibangun yang menjalankan "setterm" untuk menonaktifkan pengosongan layar dan penghematan daya setelah tty dimulai:

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

Dan akhirnya perintah itu ditambahkan ke file konfigurasi pemula:

| sudo tee -a "$file";
Chris Pick
sumber
2

Pada sistem saya (berbagai rilis RedHat Enterprise Linux), saya telah menemukan bahwa pendekatan yang berbeda diperlukan.

Untuk sistem RHEL 5 dan 6 saya, saya dapat menambahkan baris

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

untuk /etc/rc.local. Ini menonaktifkan layar konsol yang kosong pada startup sistem.

Saya menemukan bahwa ini tidak berfungsi pada sistem RHEL 7. Di RHEL7, menjalankan setterm dari rc.local menyebabkan kesalahan yang dihasilkan:

setterm: $TERM is not defined.

Perintah ini bekerja dari shell interaktif, di mana $ TERM didefinisikan (sebagai linux). Jika saya memaksa setterm untuk menggunakannya:

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

Maka saya mendapatkan kesalahan yang berbeda:

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

Meskipun perintah yang sama berfungsi dengan baik dari sesi interaktif. Pengaturan consoleblankparameter kernel berfungsi.

Pada RHEL7, edit /etc/default/grubdan tambahkan consoleblank=0ke GRUB_CMDLINE_LINUXparameter. Kemudian jalankan grub2-mkconfig -o /boot/grub2/grub.cfgdan reboot.

Saya belum mencoba pengaturan consoleblankdi RHEL5 atau 6.

David C.
sumber
2
RHEL7 menggunakan systemd; rc.local tidak terhubung ke terminal secara default. Saya pikir Anda dapat menambahkan </dev/tty1 >/dev/tty1atau sesuatu untuk membuatnya berfungsi
sourcejedi
1

Linux Console Private CSI Sequences

Untuk mengatur sleep mode/screensaverwaktu memasukkan (di mana X adalah waktu dalam menit; 0 = tidak pernah):

(dari konsol serial)

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

atau (dari konsol framebuffer)

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

atau untuk mengaturnya di setiap boot, gunakan /etc/inittab:

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

referensi:

yurenchen
sumber
0

Menambahkan gnome-screensaver-command --exitke .profilefile saya memperbaiki masalah ini untuk saya di Debian Linux (Wheezy).

Kupikir aku akan menambahkan ini untuk membantu orang lain yang mencabut rambutnya mencoba menghentikan pengosongan layar.

Kotak centang berjudul "Layar redup untuk menghemat daya" tidak berfungsi. Meskipun tidak dicentang, MASIH akan mengosongkan layar sesuai dengan waktu tidak aktif yang dipilih.

UPDATE: Saya benar-benar perlu sleep 30 && /usr/bin/gnome-screensaver-command --exit &membuatnya bekerja dengan benar. Screensaver GNOME tampaknya dimulai lama setelah. Profil telah diproses.

mcchinsy
sumber
2
Ini tentang pengosongan layar konsol, bukan screensaver Gnome.
basic6