При наличии двух или больше сотрудничества монитора, там любой способ поместить единственного из них на резервном устройстве/приостанавливать путем выдачи команды как: xset dpms force suspend
? или установка времени с этой целью как: xset dpms 100 0 0
который работает над этими мониторами отдельно?
У меня есть два монитора, работающие друг вдоль друга, eDP1 (Мой Ноутбук) и VGA1 (Внешний монитор).
Я хочу, чтобы каждый из них вошел, приостанавливают/дежурными режим отдельно, если я непосредственно не взаимодействую с ними, предполагаю, что смотрю кино на VGA1, и в течение часа, и половина eDP1 находится на выполнении ничего.
Я не интересуюсь использованием xrandor --off --output eDP1
потому что это не достаточно быстро для работы с.
Я хочу, чтобы мой монитор был готов работать с простым движением мыши, таким образом, я могу переключиться между ними быстро.
В течение многих лет у меня была своя установка ноутбука, таким образом, что то, когда крышка является закрытым ноутбуком, приостановило бы, и внешние мониторы пойдут пробел.
По Вашей причине желания посмотреть видео в течение 90 минут на внешнем мониторе и иметь экран ноутбука идут пробел, я изменил крышку близкая опция Ничего "не Сделать":
Я не использую DPMS для внешних мониторов, но Вы могли проверить свои настройки с xset q
команда:
$ xset q
Keyboard Control:
auto repeat: on key click percent: 0 LED mask: 00000002
XKB indicators:
00: Caps Lock: off 01: Num Lock: on 02: Scroll Lock: off
03: Compose: off 04: Kana: off 05: Sleep: off
06: Suspend: off 07: Mute: off 08: Misc: off
09: Mail: off 10: Charging: off 11: Shift Lock: off
12: Group 2: off 13: Mouse Keys: off
auto repeat delay: 500 repeat rate: 33
auto repeating keys: 00ffffffdffffbbf
fadfffefffedffff
9fffffffffffffff
fff7ffffffffffff
bell percent: 50 bell pitch: 400 bell duration: 100
Pointer Control:
acceleration: 5/1 threshold: 5
Screen Saver:
prefer blanking: yes allow exposures: yes
timeout: 0 cycle: 0
Colors:
default colormap: 0xb3 BlackPixel: 0x0 WhitePixel: 0xffffff
Font Path:
/usr/share/fonts/X11/misc,/usr/share/fonts/X11/Type1,built-ins
DPMS (Energy Star):
Standby: 0 Suspend: 0 Off: 0
DPMS is Disabled
Заметьте эти строки:
Screen Saver:
prefer blanking: yes
prefer blanking: no
Также заметьте эти строки:
DPMS (Energy Star):
Standby: 0 Suspend: 0 Off: 0
DPMS is Disabled
DPMS is enabled
установить монитор на Standby
при желании.Надо надеяться, другие пользователи использовали эти опции и отправляют подробный ответ для Вас.
Как насчет того, чтобы просто закрыть ноутбук?
Почему?
Эти два монитора являются одной областью дисплея, настолько выключающий создаст много проблем как экранная перерисовка, приложения, перемещающиеся в основной монитор...
(Я шел по той дороге несколько лет назад и единственному надежному способу, которым я нашел выполнения, что Вы хотите сделать, должен нажать кнопку на внешнем мониторе или закрыть ноутбук),
Просто удостоверьтесь установку этих параметров питания с gsettings set
:
org.gnome.settings-daemon.plugins.power lid-close-suspend-with-external-monitor false
org.gnome.settings-daemon.plugins.power lid-close-ac-action 'nothing'
org.gnome.settings-daemon.plugins.power lid-close-battery-action 'nothing'
Как заголовок предполагает, это не возможно по причинам как xset
создается и из-за функций X11, которые это использует. Если мы смотрим на исходный код, xset
вызовы DPMSForceLevel(dpy,DPMSModeSuspend)
(строка 557), и переменная дисплея dpy
прибывает из XOpenDisplay()
функция (строка 203), и это по определению:
Сервер, вместе с его экранами и устройствами ввода данных, называют дисплеем.
Другими словами, xset
применяет настройки глобально к целому дисплею, не отдельным Экранам. Было бы необходимо измениться xset
исходный код для этого для работы. Сами расширения DPMS главным образом, кажется, только называют целый дисплей, не отдельные экраны, таким образом, не возможно даже записать пользовательский код с библиотекой X11.
Вручную управляя той установкой через /sys
подсистема также, кажется, не работает
$ sudo bash -c 'echo Off > /sys/class/drm/card0-VGA-1/dpms'
[sudo] password for admin:
bash: /sys/class/drm/card0-VGA-1/dpms: Permission denied
Экраны также вынуты из режима DPMS, когда ключевые события или события от нажатия мыши происходят, таким образом полагая, что можно хотеть переместить мышь или клавиатуру использования, любое из тех действий заставило бы монитор оставлять режим DPMS.
Лучшая альтернатива (и на самом деле физически рабочее решение) xrandr
- это могло использоваться для управления отдельными "выводами". В частности,
xrandr --output VGA-1 -off
выделит тот вывод. Да, Вы упомянули, что не хотите использовать это решение, так как это не достаточно быстро, однако до сих пор это - лучшее доступное. Это имеет несколько преимуществ:
xset
xrandr --output VGA-1 --brightness 0.1
будет colorize экран таким способом, которым это появляется прочь, даже при том, что --brightness
программный продукт, таким образом, дисплей не на самом деле недоступен на аппаратном уровне, ни это выключено на аппаратном уровне. Однако это делает задание очищения экрана и является также стойким к ключу/событиям от нажатия мыши.
Я посмотрел исходный код экранных заставок Помощника и Волнистого попугайчика, которые являются оба ветвлениями экранной заставки GNOME, однако в любом случае, они, кажется, программный продукт, так как нет никакого упоминания о DPMS в исходном коде.
xrandr
. На более длинном тесте это удалось довольно плохо. Не так неудавшееся выключение, но при повторной активации экрана, вид экрана был полностью испорчен. Я был бы рад отправить его, чтобы видеть, работает ли это в Вашем случае однако, но мой совет не состоит в том, чтобы использовать его.Затем, что я изменял в этой версии?
Время простоя теперь определяется и клавиатурой - и действием мыши по умолчанию. Пробуждение также сделано любым.
Как сказано моими поддерживающими отвечающими сторонами, выключая экраны от cli отдельно проблема в лучшем случае и я не нашел опцию также.
То, что я действительно находил, является способом автоматически потускнеть все экраны, кроме того, где мышь, после x время.
Здесь мы идем
#!/usr/bin/env python3
import subprocess
import gi
gi.require_version("Gdk", "3.0")
from gi.repository import Gdk
import time
import sys
def get_idle():
try:
return int(subprocess.check_output("xprintidle")) / 1000
except subprocess.CalledProcessError:
return 0
def get_monitors():
screen = Gdk.Screen.get_default()
n_mons = display.get_n_monitors()
mons = [screen.get_monitor_plug_name(i) for i in range(n_mons)]
return mons
def set_mon_dimmed(mon, dim):
print(mon, dim)
val = "0.0" if dim else "1"
try:
subprocess.Popen(["xrandr", "--output", mon, "--brightness", val])
except subprocess.CalledProcessError:
print("oops")
def mousepos():
# find out mouse location
return Gdk.get_default_root_window().get_pointer()[1:3]
def get_currmonitor_atpos(x, y, display=None):
"""
fetch the current monitor (obj) at position. display is optional to save
fuel if it is already fetched elsewhere
"""
if not display:
display = Gdk.Display.get_default()
return display.get_monitor_at_point(x, y)
display = Gdk.Display.get_default()
wait = int(sys.argv[1])
elapsed = 0
# set intervals to check
res = 2
monitors = [m for m in get_monitors()]
for m in monitors:
set_mon_dimmed(m, False)
monrecord = {}
for m in monitors:
monrecord[m] = {"idle": 0, "dimmed": False}
display = Gdk.Display.get_default()
idle1 = 0
while True:
time.sleep(res)
curr_mousepos = mousepos()
activemon = get_currmonitor_atpos(
curr_mousepos[0], curr_mousepos[1]
).get_model()
idle2 = get_idle()
if idle2 < idle1:
monrecord[activemon]["idle"] = 0
if monrecord[activemon]["dimmed"]:
set_mon_dimmed(activemon, False)
monrecord[activemon]["dimmed"] = False
for m in monrecord.keys():
curr_idle = monrecord[m]["idle"]
print(m, curr_idle)
if all([
curr_idle > wait,
monrecord[m]["dimmed"] is not True,
m != activemon
]):
set_mon_dimmed(m, True)
monrecord[m]["dimmed"] = True
else:
if m != activemon:
monrecord[m]["idle"] = curr_idle + res
idle1 = idle2
Настроенный просто:
Удостоверьтесь, что у Вас есть оба python3-gi
и xprintidle
установленный
sudo apt install python3-gi xprintidle
Скопируйте сценарий выше в пустой файл, сохраните его как dim_inactive
, и сделайте это исполняемым файлом
Выполните его командой:
/path/to/dim_inactive <idle_time_in_seconds>
пример:
/path/to/dim_inactive 120
потускнеет все экраны, где мышь не после двух минут
Если на мониторе есть ddc, который может работать - это тоже относительно медленно, но это единственный способ снизить энергопотребление в мониторе с подсветкой ccfl без xrandr. К сожалению, только половина моих мониторов реализует это.
$ ddccontrol dev:/dev/i2c-4
...
> Power control
> id=dpms, name=DPMS Control, address=0xd6, delay=-1ms, type=2
Possible values:
> id=on - name=On, value=1
> id=standby - name=Standby, value=4
...
Вы можете легко подключить шины i2c к выходам, просматривая каталоги /sys/class/drm/card*, упомянутые Сергеем выше (т. е. их подкаталоги i2c*).
Итак, "ddccontrol dev:/dev/i2c-4 -r 0xd6 -w 4" устанавливает его в режим ожидания, "ddccontrol dev:/dev/i2c-4 -r 0xd6 -w 1" снова устанавливает его в состояние On.
У меня настроены cronjobs, включая getIdle из https://github.com/IonicaBizau/screensaver/blob/master/getIdle.c, что дает время простоя X в мс.
Вероятно, вам следует добавить своего пользователя в группу i2c или иным образом разрешить доступ к шинам ddc.
Еще одна странность: хотя элемент управления ddc помечен как «Питание», по крайней мере, на моем мониторе я не могу использовать его для определения фактического состояния питания — если я выключаю монитор вручную, он все еще показывает «Вкл.» и Не могу включить через i2c.