나는 창 관리자로 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-1
OR 이 있는지 확인 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*
"연결 끊김"을 검색할 때 "연결됨"이라는 단어가 계속 나타납니다.