私はウィンドウマネージャとしてbspwmを使用します。長い間デスクトップで使用していたが、今はノートパソコンでも使用していますが、ここでは操作が少し難しいですね。
私モンス私の「画面レイアウト」を自動的に処理します。 bspwmrcでデーモンとして実行し、外部モニターを取り外すと、自動的にラップトップ画面にのみ変更されます。いいね
問題は、私のラップトップにAMD統合グラフィックとNvidia専用グラフィックの2つのグラフィックカードがあることです。これがxrandr
私が持っているものです:
- 統合AMDランタイムの使用:
- ラップトップディスプレイ:
eDP-1
- 外部ディスプレイポート1:
DP-1
- 外部ディスプレイポート2:
DP-2
- 外部HDMI:
HDMI-1
- ラップトップディスプレイ:
- NVIDIA専用の場合:
- ラップトップディスプレイ:
eDP-1-1
- 外部DP:
DP-1-1
- 外部DP:
DP-1-2
HDMI-1-1
- ラップトップディスプレイ:
簡単にするために、以下を区別する必要があります。
- AMDのみ
- NVIDIAのみ
- AMD +ディスプレイポート(1回のみ対応(したがって
eDP-1
)) - Nvidia + ディスプレイポート 1(
eDP-1-1
)
bspwm grepの結果を教えて、xrandr
それに応じてワークスペースを割り当てたいと思います。手動で実行した場合は、次を実行します。
ノートパソコンの画面しかない場合(AMDまたはNvidiaで実行されているかどうかわからない):
bspc monitor -d I II III IV V VI VII VIII IX X
AMD統合+外部DisplayPortで実行する場合:
bspc monitor eDP-1 -d I II III IV V bspc monitor DP-1 -d VI VII VIII IX X
NVIDIAのみ+外部モニタを使用してDisplayportで実行している場合:
bspc monitor eDP-1-1 -d I II III IV V bspc monitor DP-1-1 -d VI VII VIII IX X
eDP-1
ORがあることを確認しDP-1
、それに応じて行動するためにif / else決定をeDP-1-1
作成する方法はDP-1-1
?
私はbash、スクリプト、またはプログラミングをまったく知らないので、これを正しくする方法が本当にわかりません。助けてください?
私はそれを十分に説明してほしい!
PS:^
DPの前にgrep行があります。スタート大文字のPを使用してください。それ以外の場合は、ノートパソコンの画面も探します。
ベストアンサー1
まあ、数時間の試行錯誤の最後にやっとやりました。また、スクリプトでif文を使用する方法も学んだので、それほど価値がありました。
解決策は次のとおりです。
amddp=$(xrandr --query | grep '^DP-1')
nvidiadp=$(xrandr --query | grep '^DP-1-1 connected')
if [[ $amddp = *\ connected* ]]; then
bspc monitor eDP-1 -d I II III IV V
bspc monitor DP-1 -d VI VII VIII IX X
elif [[ $nvidiadp = *\ connected* ]]; then
bspc monitor eDP-1-1 -d I II III IV V
bspc monitor DP-1-1 -d VI VII VIII IX X
else
bspc monitor -d I II III IV V VI VII VIII IX X
fi
少し理解:
- DP-1をgrepする場合
^
(つまり、次に始まる行DP-1、ノートパソコンのeDP-1画面を避けてください。 - と言うと
= *\ connected*
次のような意味です。*
すべての文字または文字グループ(grepコマンドが出力するスクリプトに行全体を書き込む必要がないため、これを使用します)。\
(バックスラッシュスペース)は実際にスペース文字を表します。それ以外の場合は、モニターを切断したときに*connected*
「切断」を検索しても「接続済み」という単語が表示され続けます。