2つ以上のモニターが一緒に動作しているときに、次のようなコマンドを発行して、それらの1つをスタンバイ/サスペンドにする方法はありますか?xset dpms force suspend
?または、次のような目的のために時間を設定しています:xset dpms 100 0 0
これらはこれらのモニターで個別に機能しますか?
EDP1(マイラップトップ)とVGA1(外部モニター)の2つのモニターが連動しています。
VGA1で映画を見ていて、1時間半eDP1が何もしていなかった場合、それらと直接対話していない場合は、それぞれを個別にサスペンド/スタンバイモードにしたいと思います。
xrandor --off --output eDP1
を使用するのに十分な速度がないため、使用に興味がありません。
簡単なマウスの動きでモニターを動作させる準備ができているので、モニターをすばやく切り替えることができます。
タイトルが示すように、howxset
が構築され、X11関数が使用するため、これは不可能です。ソースコードを見ると、xset
はDPMSForceLevel(dpy,DPMSModeSuspend)
( 行557 )を呼び出し、表示変数dpy
はXOpenDisplay()
function( line 2 )、それは definition によるものです。
サーバーは、その画面および入力デバイスとともに、ディスプレイと呼ばれます。
つまり、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
_はソフトウェアソリューションであるにもかかわらず、_--brightness
_は画面を色付けしてオフにします。そのため、ハードウェアレベルでディスプレイが実際に暗くなったり、ハードウェアレベルでオフになったりすることはありません。ただし、画面を非表示にする機能があり、キー/マウスイベントにも耐性があります。
どちらもGNOMEスクリーンセーバーのフォークである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
に設定することをお勧めします。うまくいけば、他のユーザーがこれらのオプションを使用し、詳細な回答を投稿してくれました。
単にラップトップを閉じるのはどうですか?
なぜ?
これらの2つのモニターは1つの表示領域であるため、1つをオフにすると、画面の再描画、アプリケーションがメインモニターに移動するなどの多くの問題が発生します...
(私は数年前にその道を進みました、そしてあなたがやりたいことをするために私が見つけた唯一の信頼できる方法は、外部モニターのボタンを押すか、ラップトップを閉じることです)
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'
xrandr
を使用して以下のスクリプト画面をオフにするを作成しました。より長いテストでは、これはかなりひどくうまくいきました。スイッチオフに失敗することはそれほどありませんでしたが、画面を再アクティブ化すると、画面レイアウトが完全にめちゃくちゃになりました。私はそれがあなたのケースで動作するかどうかを確認するために投稿したいと思いますが、私のアドバイスはそれを使用しないことです。その後、このバージョンで何を変更しましたか?
アイドル時間は、デフォルトでキーボードとマウスの両方のアクティビティによって定義されるようになりました。目覚めもどちらかで行われます。
他の回答者が言ったように、画面をcliから個別にオフにすることはせいぜい難題であり、私も選択肢を見つけられませんでした。
私が見つけたのは、x時間後に自動的にdimすべての画面、-exceptマウスが置かれている画面を表示する方法です。
ここに行きます
#!/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
すべての画面を暗くしますマウスがない場所 2分後に