다중 모니터 설정에서 xset을 사용하여 모니터를 대기시키는 방법은 무엇입니까? 설정해야합니다 . eDP1 (내 노트북)과 VGA1 (외부

둘 이상의 모니터가 함께 작동하는 동안 다음과 같은 명령을 실행하여 모니터 중 하나를 대기 / 일시 중단 상태로 전환하는 방법이 xset dpms force suspend있습니까? 또는 xset dpms 100 0 0다음 과 같은 목적을 위해 시간을 설정해야합니다 .

eDP1 (내 노트북)과 VGA1 (외부 모니터)이라는 두 개의 모니터가 서로 작동합니다.

직접 상호 작용하지 않으면 VGA1에서 영화를보고 있고 eDP1이 30 분 동안 아무것도하지 않는다고 가정하면 각각이 일시 중지 / 대기 모드로 전환되기를 원합니다.

xrandor --off --output eDP1작업하기에 충분히 빠르지 않기 때문에 사용에 관심 이 없습니다.

마우스를 움직여 모니터를 빠르게 사용할 수 있도록 모니터를 작동시킬 수 있기를 바랍니다.

  • 러닝 : Ubuntu 18.04
  • 창 관리자 : OpenBox


답변

xset (및 실제로 X11)에서는 개별 모니터를 제어 할 수 없습니다

제목에서 알 수 있듯이, 그것은 이유로 수 없습니다 방법 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

출력을 해제합니다. 예,이 솔루션은 충분히 빠르지 않기 때문에이 솔루션을 사용하고 싶지 않다고 언급했지만 지금까지는 최상의 솔루션입니다. 몇 가지 장점이 있습니다.

  • 키 및 마우스 이벤트에 면역
  • 독립적으로 outpus를 제어 xset

xrandr --output VGA-1 --brightness 0.1, 비록 그것이 떨어져 나타나는 등의 방식으로 화면 색상 화됩니다 --brightness디스플레이가 실제로 하드웨어 수준에서 흐리게되지 않도록, 소프트웨어 솔루션입니다 않으며 하드웨어 수준에서 꺼져 있습니다. 그러나 화면을 비우는 작업을 수행하며 키 / 마우스 이벤트에도 저항합니다.

나는 그놈 스크린 세이버의 포크 인 Mate와 Budgie 스크린 세이버의 소스 코드를 보았지만 소스 코드에 DPMS에 대한 언급이 없기 때문에 소프트웨어 솔루션 인 것처럼 보입니다.


답변

몇 년 동안 나는 뚜껑을 닫을 때 랩톱이 일시 중단되고 외부 모니터가 꺼 지도록 랩톱 설치를했습니다.

외부 모니터에서 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'

답변

임시 의견

  1. 영업 이익의 요청에, 나는 아래의 스크립트가 만든 해제 화면을 전환 에 의해 xrandr. 더 긴 테스트에서 이것은 꽤 나빴습니다. 전원을 끄는 데 실패한 것은 아니지만 화면을 다시 활성화 할 때 화면 레이아웃이 완전히 엉망이되었습니다. 그러나 귀하의 경우에 효과가 있는지 확인하기 위해 게시 할 수는 있지만 제 조언은 사용하지 않는 것입니다.
    스크립트에서 대신 밝기를 0으로 설정했습니다.
  2. 마우스 위치 또는 활성 창의 위치에 따라 활성 모니터 정의해야하는지에 대한 논의가있었습니다 . 창이 없으면 후자는 작동하지 않습니다. 윈도우 자체가 없을 수도 있습니다 (데스크톱 자체는 제외). IMO는 이해하기 쉬운 유일한 옵션이며 모든 경우에 예측 가능한 방식으로 작동합니다. 마우스 위치로 활성 화면을 정의하는 것입니다. 또한 창 관리자가 새 창을 표시 할 위치를 결정하는 방식이기도합니다.

그렇다면이 버전에서 무엇을 변경 했습니까?
유휴 시간은 이제 기본적으로 키보드 및 마우스 활동으로 정의됩니다. 깨어나는 것도 어느 ​​쪽이든에 의해 이루어집니다.


비활성 화면 자동 어둡게

동료 응답자들이 말했듯이 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

설정 방법

설정은 간단합니다.

  1. 둘 다 설치 python3-gi하고 xprintidle설치 했는지 확인하십시오

    sudo apt install python3-gi xprintidle
    
  2. 로 저장, 빈 파일로 위의 스크립트를 복사 dim_inactive하고, 그것을 실행하기

  3. 다음 명령으로 실행하십시오.

    /path/to/dim_inactive <idle_time_in_seconds>
    

    예를 들면 :

    /path/to/dim_inactive 120
    

    2 분이 지나도 마우스가없는 모든 화면이 흐리게

추가 정보 / 설명

  • 스크립트는 시작시 모든 화면을 나열합니다
  • 모니터 당 유휴 시간 (2 개 이상) 일 경우 기록을 유지합니다 . x 초 동안 모니터에 액세스하지 않으면 마우스가있는 모니터별도로 검은 색으로 표시됩니다 .
  • 좋은 (그러나 나쁜) 전통에 따르면, Gnome은 계속해서 문제를 해결하고 API를 계속 변경합니다. 결과적으로이 스크립트를 19.04 이상에서 실행하면 사용되지 않는 몇 가지 경고가 표시됩니다. 동시에 PEP8에서는 깨지지 않습니다. 그럼에도 불구하고 최신 API로 업데이트됩니다.

답변