Thay đổi hành vi xóa màn hình bảng điều khiển Linux


38

Làm cách nào để thay đổi hành vi xóa màn hình trên thiết bị đầu cuối ảo Linux?

Ví dụ: nếu tôi chuyển sang VT từ X, đăng nhập và để hệ thống một mình trong 5 phút hoặc lâu hơn, màn hình sẽ trống như trình bảo vệ màn hình. Nó trở lại với bất kỳ phím bấm nào, như trình bảo vệ màn hình.

Hầu như tôi chỉ muốn thay đổi thời gian chờ, nhưng tôi cũng quan tâm đến các cài đặt khác.

Nếu có ích, một trong những hệ thống của tôi đang chạy Ubuntu 10.04 với trình điều khiển đồ họa gốc. fbsethiển thị bảng điều khiển bằng radeondrmfbthiết bị bộ đệm khung.


2
Hy vọng điều này sẽ giúp ích cho bạn, tôi đã tìm thấy điều này khi tôi gặp câu hỏi tương tự Askubfox.com/questions/138918/iêu

Câu trả lời:


42

settermtừ câu trả lời của @ whitequark là một công cụ không gian người dùng hợp lý, nhưng nó không phải là toàn bộ câu chuyện.

Hành vi xóa bảng điều khiển mặc định được đưa vào kernel trong thời gian biên dịch. Nó có thể được cấu hình khi khởi động với paramater consoleblank = hoặc trong không gian người dùng với setterm. Từ tài liệu kernel ( kernel -ameter.txt ):

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

Dưới đây là các tùy chọn, mặc định của chúng trên hệ thống Ubuntu của tôi và phạm vi ảnh hưởng của chúng:

  • setterm -blank [0-60]; luôn báo cáo 0 khi truy vấn; hiệu quả khi chạy trên VT thực; ảnh hưởng đến tất cả các TTY thực sự; không hiệu quả khi chạy trong các phiên màn hình trên VT.
  • setterm -powerdown [0-60]; luôn báo cáo "3]" (??); dường như không có bất kỳ ảnh hưởng. Các hạt nhân Ubuntu không kích hoạt APM_DISPLAY_BLANK và điều này có thể liên quan.
  • consoleblank=N; mặc định là 600 (10 phút); ảnh hưởng đến tất cả các VT thực sự; ảnh hưởng đến các phiên sàng lọc trong VT; không có cách nào để thiết lập trong khi chạy

Vì vậy, các tùy chọn của tôi để thay đổi mặc định là một trong những điều sau đây:

  1. Thêm setterm -blank X(X trong vài phút, 0 để tắt) vào tệp init shell như .bashrc .
  2. Thêm setterm -blank Xvào /etc/rc.local .
  3. Thêm consoleblank=Y(Y trong vài giây, 0 để vô hiệu hóa) vào dòng lệnh kernel bằng cách thêm nó vào danh sách tham số trong / etc / default / grub , GRUB_CMDLINE_LINUX hoặc GRUB_CMDLINE_LINUX_DEFAULT . (Đừng quên update-grub.)

4
Tôi muốn lưu ý rằng setterm -blank Xnó không hoạt động với tôi từ bên trong tmux , nhưng hoạt động hoàn hảo khi tôi thoát khỏi tmux trước khi chạy lệnh.
Cody Hess

1
Nếu bạn đang sử dụng grub2 làm bộ tải khởi động, bạn có thể thêm tham số kernel này vào / etc / default / grub GRUB_CMDLINE_LINUX_DEFAULT="consoleblank=0"và sau đó cập nhật cấu hình grub của bạn với grub[2]-mkconfig -o /boot/grub/grub.cfg.
dùng3132194

3]for setterm -powerdownchỉ là một nửa đúng: setterm -powerdown 3 | hexdump -ctrả về 033 [ 1 4 ; 3 ]. Không chắc chắn điều gì sẽ diễn giải chuỗi thoát này ...
Daniel Alder

1
Tùy thuộc vào phân phối của bạn và nơi bạn muốn thay đổi có hiệu lực, một số tùy chọn này có thể không hoạt động. Tôi thấy rằng setterm trong RC.local hoạt động rất tốt cho RHEL 5 và 6, nhưng không phải 7.
David C.

9

Hãy thử setterm -blank $minutes(hoặc vượt qua 0 để tắt); -powersavetùy chọn cũng có thể liên quan. settermcũng có rất nhiều lựa chọn hữu ích khác

Nếu bạn muốn đặt các thuộc tính này khi khởi động hệ thống, hãy xem xét việc viết một bản initscript. Đây chỉ là một kịch bản được đặt trong /etc/init.dthư mục. Hãy để nó được gọi là 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

Sau đó làm cho nó thực thi:

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

Và cuối cùng, tạo các symlink /etc/rcX.d (cách Debian):

# update-rc.d setterm defaults

(Nếu bạn cảm thấy mệt mỏi với hành vi đó, hãy làm # update-rc.d -f setterm remove. Lưu ý rằng đó -fphải là đối số đầu tiên).


giờ có vẻ hữu ích cho việc di chuyển, dường như trên hệ thống Ubuntu thử nghiệm của tôi, nó thực sự là -powerdowncài đặt có hiệu lực. Còn về cài đặt mặc định khi khởi động, toàn hệ thống thì sao? đang chạy setterm -blank Xhoặc setterm -powerdown Ytrong /etc/rc.local (hoặc ~ / .bashrc ) có hợp lý không?
quack quixote

1
Có, nhưng chỉ khi rc.localthực sự hoạt động. ( upstartDi chuyển gần đây đã làm hỏng một số thứ, thông qua nó dường như tồn tại và hoạt động trên hệ thống của tôi.) Nếu không, bạn nên tạo một bản initscript. Điều đó thật dễ dàng: trong trường hợp của chúng tôi, nó phải khởi tạo mọi thứ khi được thông qua startdưới dạng đối số đầu tiên và không làm gì khác. Tôi sẽ mô tả điều đó trong câu trả lời của tôi.
Whitequark

Lệnh setterm -blank X >/dev/ttyNdường như không hoạt động, vì vậy tôi không nghĩ rằng khái niệm initscript sẽ hoạt động. chạy qua một tham số thời gian khởi động và đã nghiên cứu thêm. tôi dường như sai về -powerdown-powersave; chưa được thử nghiệm đầy đủ nhưng những thứ đó không hoạt động trên hệ thống của tôi. setterm -blank Xhoạt động, chỉ từ một VT thực và ảnh hưởng đến tất cả các VT, vì vậy chạy một lần qua /etc/rc.local là hợp lý. (Upstart không lấy đi rc.local , chỉ là /etc/rcX.d thứ.)
quack quixote

1
À. Có vẻ như settermphát ra các chuỗi thoát stdout, nhưng kiểm tra loại TTY với stdin: Tôi vừa kiểm tra và setterm ... >/dev/ttyN </dev/ttyNhoạt động như dự định.
Whitequark

điều đó có ý nghĩa và nó hoạt động (từ một TTY thực sự), nhưng ý nghĩa của việc sử dụng cú pháp đó là gì? (1) vẫn không hoạt động từ bên trong màn hình (hoặc có khả năng là các PTY khác), đó là nơi chỉ định a / dev / ttyN sẽ hữu ích; (2) thiết lập một VT ảnh hưởng đến tất cả, do đó không cần vòng lặp initscript.
quack quixote

3

Nếu bất cứ ai đang tìm kiếm một giải pháp khả thi khác cho Debian (có thể không phải Ubuntu):

Trong /etc/kbd/config, hãy tìm một cài đặt có tên "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

Thay đổi nó thành 0, điều này sẽ vô hiệu hóa nó:

BLANK_TIME=0

Đã thử nghiệm trên Debian 6 và 7.


2

Nếu bạn đang chạy Ubuntu mới hơn sử dụng mới bắt đầu, bạn có thể sử dụng:

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

Một lời giải thích nhỏ về những gì đang xảy ra ở đây:

Các phiên bản Ubuntu mới hơn sử dụng khởi động để khởi động hệ thống. Với sự khởi đầu, các bảng điều khiển Linux được thiết lập với các tệp cấu hình được lưu trữ trong / etc / init. Lệnh trên bắt đầu bằng cách lặp qua từng tệp cấu hình đó:

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

Tên tệp cấu hình khởi động của tty trong tệp $ được sử dụng để tạo tên của thiết bị tty:

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

Một lệnh "khởi động" mới bắt đầu được xây dựng để chạy "setterm" để vô hiệu hóa màn hình trống và tiết kiệm năng lượng sau khi tty được khởi động:

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

Và cuối cùng, lệnh đó được thêm vào tập tin cấu hình mới nhất:

| sudo tee -a "$file";

2

Trên các hệ thống của tôi (các bản phát hành khác nhau của RedHat Enterprise Linux), tôi đã thấy rằng cần có các cách tiếp cận khác nhau.

Đối với hệ thống RHEL 5 và 6 của tôi, tôi có thể thêm dòng

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

để /etc/rc.local. Điều này vô hiệu hóa màn hình điều khiển trống khi khởi động hệ thống.

Tôi thấy rằng điều này không hoạt động trên các hệ thống RHEL 7. Trên RHEL7, chạy setterm từ RC.local gây ra lỗi được tạo:

setterm: $TERM is not defined.

Lệnh hoạt động từ một vỏ tương tác, trong đó $ TERM được định nghĩa (dưới dạng linux). Nếu tôi buộc setterm sử dụng nó:

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

Sau đó, tôi nhận được một lỗi khác:

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

Mặc dù cùng một lệnh hoạt động tốt từ một phiên tương tác. Đặt consoleblanktham số kernel hoạt động.

Trên RHEL7, chỉnh sửa /etc/default/grubvà nối consoleblank=0vào GRUB_CMDLINE_LINUXtham số. Sau đó chạy grub2-mkconfig -o /boot/grub2/grub.cfgvà khởi động lại.

Tôi chưa thử cài đặt consoleblanktrên RHEL5 hoặc 6.


2
RHEL7 sử dụng systemd; RC.local không được kết nối với một thiết bị đầu cuối theo mặc định. Tôi nghĩ bạn có thể thêm </dev/tty1 >/dev/tty1hoặc một cái gì đó để làm cho nó hoạt động
sourcejedi

1

Bảng điều khiển Linux Trình tự CSI riêng

Để đặt sleep mode/screensaverthời gian nhập (trong đó X là thời gian tính bằng phút; 0 = không bao giờ):

(từ bảng điều khiển nối tiếp)

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

hoặc (từ bảng điều khiển bộ đệm khung)

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

hoặc để đặt nó ở mỗi lần khởi động, hãy sử dụng /etc/inittab:

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

giới thiệu:


0

Thêm gnome-screensaver-command --exitvào .profiletệp của tôi đã khắc phục sự cố này cho tôi trên Debian Linux (Wheezy).

Tôi nghĩ rằng tôi sẽ thêm điều này để giúp những người khác đang nhổ tóc cố gắng ngăn chặn màn hình trống.

Một hộp kiểm có tiêu đề "Màn hình mờ để tiết kiệm năng lượng" đang gặp trục trặc. Ngay cả khi không được chọn, nó vẫn VẪN làm trống màn hình theo thời gian không hoạt động được chọn.

CẬP NHẬT: Tôi thực sự cần thiết sleep 30 && /usr/bin/gnome-screensaver-command --exit &để làm cho nó hoạt động đúng. Trình bảo vệ màn hình Gnome dường như bắt đầu lâu sau khi .profile được xử lý.


2
Đây là về xóa màn hình giao diện điều khiển, không phải trình bảo vệ màn hình Gnome.
bản6
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.