質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Arch Linux

arch(アーク)は、バージョン管理システムです。 また、リポジトリ(アーカイブ)操作を行えるツールの総称として扱われています。

Q&A

解決済

2回答

1422閲覧

i3-wm xrandrを実行するとブラックアウトする

mochmoch

総合スコア39

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Arch Linux

arch(アーク)は、バージョン管理システムです。 また、リポジトリ(アーカイブ)操作を行えるツールの総称として扱われています。

0グッド

0クリップ

投稿2021/05/13 09:36

編集2021/05/14 04:58

i3-wmでxrandrを実行するとブラックアウトする

タイル型wmを使ってみようと思い、i3-wmを導入しました。

マルチディスプレイ環境なのでxrandr等でディスプレイの設定を行う必要がありますが、毎回手動で設定するのは面倒なため、https://github.com/fogine/i3-workscreenを導入しました。

最初のうちはうまく動いていたように見えたのですが、何度か起動をしていくうちにi3の起動と同時に画面がブラックアウトしてしまうようになってしまいました。

原因を調べたところ以下のことがわかっています。

  • 直接的な原因はxrandr --output ~~のコマンドにあると思われる

i3-workscreenを使わないで自分で作成したスクリプトやarandrで生成されるシェルスクリプト、xrandrのコマンドを実行した際も同様の動作になるため。

  • 起動と同時に動かさなければ発生しない

~/.config/i3/configから該当行を消してi3を起動し、端末からxrandrを実行する場合には問題なくディスプレイが拡張される。
また、このことからシェルスクリプトには問題がないと思われる。

~/.config/i3/configと自分で作成したスクリプトは以下のとおりです。

~/.config/i3/config(長すぎて本文の文字数制限を超過したのでgistにしています)
https://gist.github.com/f248ac7c5ed9b08393c4574e417c1e71

python:python

1# 自作スクリプト 2 3import subprocess 4import re 5from typing import List 6import json 7import os 8 9 10def monitor_setting(config: dict) -> str: 11 cmd = "xrandr" 12 xrandr = subprocess.check_output("xrandr").decode("UTF8") 13 for output in config["outputs"]: 14 if re.search(f"{output['name']} connected", xrandr): 15 cmd += " " + " ".join(["--output", output["name"], "--auto"] + 16 output.get("xrandr", ["--primary"])) 17 18 if config["disableEmptyOutputs"] and cmd == "xrandr ": 19 raise ValueError 20 return cmd 21 22 23if __name__ == "__main__": 24 with open(f"{os.environ["HOME"]/.config/i3-workscreen/config.json") as f: 25 d = json.load(f) 26 print(d) 27 # print(monitor_setting(d)) 28 subprocess.run(monitor_setting(d)) 29

bash

1# arandrで出力されたファイル 2 3#!/bin/sh 4xrandr --output eDP1 --primary --mode 1366x768 --pos 3840x312 --rotate normal --output DP1 --off --output DP2 --off --output DP2-1 --off --output DP2-2 --mode 1920x1080 --pos 1920x0 --rotate normal --output DP2-3 --mode 1920x1080 --pos 0x0 --rotate normal --output HDMI1 --off --output HDMI2 --off --output VIRTUAL1 --off 5

解決策をご教示いただければ幸いです。

## 環境

  • OS: Manjaro Linux x86_64
  • i3-gaps Version 4.19.1-1
  • i3-workscreen 1.0.0

追記

症状が発生する状況が少しはっきりしたので追記します。
Thinkpad X270をドックにつないいますが、起動時にマルチディスプレイ環境だと2種類の挙動をします。

  1. 起動時(lightdmのログイン画面に到達したタイミング)でノートPCにのみ画面が描画されている
  2. 〃外部ディスプレイにもログイン画面が描画されている

(1)の状況だと問題が発生するようです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

起動時だとモニターをうまく識別できないとかなんですかね??(よくわからないですが)
sleepを入れる等で時間をずらしてあげれば、もしかすると解決するかも知れません。


ちなみに私もi3で同じようにモニターの自動識別をしてますが、udevを使ってます。理由はモニターの切断、接続時にも自動で動いて欲しいからです。
今のところうまく動いているように思います。

以下私の設定です。ご参考になれば。
https://github.com/yutkat/dotfiles/blob/f41be78f336388b01eb89c9c1dbafa255abede91/install_scripts/lib/arch-extra-setup/udev/rules.d/95-monitor-hotplug.rules

投稿2021/05/13 14:11

yutkat

総合スコア135

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mochmoch

2021/05/14 05:20

1. `sleep` sleep 5でやってみましたがうまくいかなかったです 記事に追記しましたが、おそらくi3が起動する前にディスプレイの認識がうまくいっていないのが原因だと思います。 2. udev 提示して頂いた設定やi3-workscreenのリポジトリのREADMEを参考に以下を`/etc/udev/rules.d/98-monitor-hotplug.rules`に書き込みましたが、画面が乱れたあとに1枚のみ描画されるのでやはりもっと下の部分に原因がありそうです ``` KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="change", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/mochi/.Xauthority", ENV{HOME}="/home/mochi", RUN+="i3-workscreen" ```
yutkat

2021/05/14 09:38

あと考えられるとするとカーネルとかX11とかのアップデートで稀に不安定になることはありますね。 意外とSwayに乗り換えて使ってみたらうまくいくとかないですかね??Waylandなのでチラツキとかはなくなります。
guest

0

自己解決

ひとまず動くようになったので質問をクローズします。

症状まとめ

  • lightdm起動時にプライマリ(ノートPCをドックにつないでいるのでノートPCのディスプレイ)のみにログイン画面が描画されているときにxrandr ~~実行時にブラックアウトする。
    ブラックアウト後にctrl+alt+F3でコンソールに移行、startxができるのでxがクラッシュしているみたいです
  • 画面拡張をせずにi3を起動、xrandr --output eDP1 --auto --primary --output DP2-2 --autoを実行すると画面が拡張できるが、追加でxrandr --output DP2-1 --auto --left-of DP2-2を実行するとxrandr: COnfigure crtc 1 failedとなり、拡張できない

また、まとめてxrandrを実行するとxがクラッシュする
DP2-2をつける際に一度eDP1をoffにするなどするとたまにつくが再現ができないので不明

解決策

xrandrで設定するまえにxorg.confでディスプレイの設定をする。

どうやらx sevevrの起動時にうまくいかないとxrandrが動かないので手書きで/etc/X11/xorg.conf.d/01-monitor-detect.confを以下の内容で作成しました。

conf:monitor

1Section "Monitor" 2 Identifier "eDP1" 3 Option "Primary" "true" 4EndSection 5 6Section "Monitor" 7 Identifier "DP2-2" 8 Option "LeftOf" "eDP1" 9EndSection 10 11Section "Monitor" 12 Identifier "DP2-1" 13 Option "LeftOf" "DP2-2" 14EndSection

これをおいた状態でlightdmが起動するとログイン画面ですでに3枚が認識されている状態になるので、そこでxrandr ~~を実行すると画面が拡張できました。

参考

xorg.conf を使って設定
display - xrandr three monitors - Unix & Linux Stack Exchange

投稿2021/05/14 16:39

mochmoch

総合スコア39

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問