wmctrl
커맨드 토글 을 사용하려고했지만 우분투 설정에서 작동하지 않았습니다. 토글은 켜지지 만 꺼지지는 않습니다. (저는 wmctrl
AFAIK가 약간 손상된 그놈 데스크탑 환경을 사용하고 있기 때문일 수 있습니다 ).
어쨌든 많은 연구와 bash에서 적절한 코드를 작성하는 방법을 연구 한 후 wmctrl
논리 계층 내의 명령을 사용 하여 현재 그놈 데스크탑에서 '항상 최고'상태를 효과적으로 전환 하는 단일 명령을 만들었습니다 . Ask Unix / Linux에이 답변을 게시했지만 다른 사람이 같은 문제가있는 경우 여기에 게시하겠다고 생각했습니다.
명령은 다음과 같습니다.
bash -c 'wmctrl -r :ACTIVE: -b $([[ $(xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}") _NET_WM_STATE) =~ "ABOVE" ]] && echo "remove" || echo "add"),above'
를 사용하여 활성 창 상태 속성 "_NET_WM_STATE"를 xprops
확인하고 "항상 맨 위"옵션이 활성화되어 있음을 나타내는 "ABOVE"텍스트가 포함되어 있는지 확인합니다. 그런 다음 wmctrl
매개 변수를 사용 add
하거나 remove
적절하게 명령을 실행합니다 .
명령 분석 (각 명령이 다음에 삽입되어 ■
자리 표시자를 대체 함 ) :
활성 창 ID를 가져옵니다.
xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}"
xprop
ID 를 사용하여 창 상태를 가져 옵니다.
xprop -id $(■) _NET_WM_STATE
창에 "항상 상단"으로 설정되어 있음을 나타내는 상태에 "ABOVE"가 포함되어 있는지 확인하십시오.
[[ $(■) =~ "ABOVE" ]]
true이면 "제거"를, 그렇지 않으면 "add"를 반환하십시오.
■ && echo "remove" || echo "add"
wmctrl
리턴 값을 매개 변수로 사용하여 명령을 실행 하십시오.
wmctrl -r :ACTIVE: -b $(■),above
bash
명령 대체 ${ ... }
, bash 부울 평가 [[ ... ]]
및 정규식 일치 연산자를 사용할 수 있도록 모든 것을 보내십시오 =~
.
bash -c '■'
이 마지막 단계는 특히 이해하는데 오랜 시간이 걸렸습니다. 키보드 단축키가 기본적으로 bash에서 실행되지 않는다는 것을 알기 전까지는 명령을 테스트 할 때 콘솔에서 명령이 작동하는 이유를 알지 못했지만 키보드 단축키로 직접 실행할 때 자동으로 실패했습니다. 그것은 나를 오랫동안 벽으로 몰았다!
참고 : bash로 보내는 명령 주위에 따옴표가 필요하기 때문에 명령을 작성할 때 (큰 따옴표를 사용하여) 한 단계 이상 더 깊이 들어 가지 않는다는 명령을 작성할 때주의해야했습니다. 따옴표 안에 문자열을 더 중첩하면 따옴표를 피하기 위해 많은 혼란스러운 백 슬래시가 필요했습니다.