다중 모니터를 사용하여 BSPWM에서 데스크탑 및 Polybar를 관리하는 방법

다중 모니터를 사용하여 BSPWM에서 데스크탑 및 Polybar를 관리하는 방법

나는 창 관리자로 bspwm을 사용합니다. 오랫동안 데스크탑에서 사용하다가 이제는 노트북에서도 사용하고 있는데 여기서는 조작이 좀 어렵네요.

나는몬스내 "화면 레이아웃"을 자동으로 처리합니다. bspwmrc에서 데몬으로 실행하고 외부 모니터를 분리하면 자동으로 노트북 화면으로만 변경됩니다. 좋아요

문제는 내 노트북에 AMD 통합 그래픽과 Nvidia 전용 그래픽이라는 두 개의 그래픽 카드가 있다는 것입니다. 이것이 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-1OR 이 있는지 확인 DP-1하고 그에 따라 행동하기 위해 if/else 결정 eDP-1-1을 작성하는 방법은 무엇입니까 DP-1-1?

나는 bash, 스크립팅 또는 프로그래밍을 전혀 모르기 때문에 이것을 올바르게 만드는 방법을 정말로 모릅니다. 도와주세요?

나는 그것을 충분히 잘 설명했으면 좋겠다!

추신: ^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*"연결 끊김"을 검색할 때 "연결됨"이라는 단어가 계속 나타납니다.

관련 정보