특정 창을 집중시키는 Bash 명령


49

bash 명령 줄에 실행중인 프로세스의 특정 창에 초점을 맞추는 방법이 있습니까? 프로세스의 이름, 번호 및 필요한 다른 것을 알고 있다고 가정하십시오.

예를 들어, Firefox의 단일 인스턴스가 실행 중이지만 최소화되어 있거나 그 위에 다른 창이 있습니다. Firefox 창을 활성화하고 활성화하여 bash 명령이 필요합니다.

답변:


76

wmctrl 명령이 작업을 수행하는 것 같습니다. 이미 설치되어 있지만 필요한 경우 리포지토리에서 사용할 수 있습니다.

wmctrl -l 

현재 열려있는 창 (그놈 패널 포함)을 나열합니다.

wmctrl -a STRING

제목에 STRING이 (가)있는 창에 초점을 둡니다. 둘 이상의 창이 해당 조건을 충족하면 어떻게 될지 잘 모르겠습니다.
필자의 경우 명령은 다음과 같습니다.

wmctrl -a Firefox

6
누군가 읽고있는 것을보고 반가워요. =)
Malabarba


kvm과 같이 포커스를 훔치는 창으로 디버거 타겟을 시작할 때 포커스를 gdb (디버거)로 다시 설정하는 것이 좋습니다. GDB 명령을 사용하여 shell wmctrl -a something, 뭔가 디버거 터미널 제목에 뭔가를.
doug65536

정말 고마워요, 이것은 순수한 금입니다. 어쨌든 백그라운드에서 사라진 일부 Chrome 창에서 보류중인 모든 작업을 잃어 버릴 까봐 두려웠습니다.
Osmar

8

wmctrl와 함께 사용하면 xdotool포커스를 Firefox로 전환 한 다음 키보드 또는 마우스 동작을 수행 할 수 있습니다.

이 예에서 :

wmctrl -R firefox && \
  xdotool key --clearmodifiers ctrl+t ctrl+l && \
  xdotool type --delay=250 google && \
  xdotool key --clearmodifiers Tab Return

다음 단계가 실행됩니다.

  1. 일치하는 첫 번째 Firefox 창에 집중하십시오
  2. 새 브라우저 탭을 엽니 다
  3. 주소 표시 줄에 초점을 둡니다
  4. "google"을 입력하십시오
  5. 첫 번째 브라우저 자동 완성 결과로 탭
  6. Return (또는 Enter) 키를 누르십시오

4

내 우분투 PC에서 사용하는 아래 스크립트는 어떻습니까? 유스 케이스는 이와 같습니다.

   $ ./focus_win.sh 1            # focus on a application window that executed at first
   $ ./focus_win.sh 2            # second executed application window

키보드 사용자 정의 바로 가기에 할당 한 후 사용하고 있습니다. ctrl + 1, ctrl + 2, ...

고양이 focus_win.sh

#! /bin/sh

if [ "" = "$1" ] ; then
    echo "usage $0 <win index>"
    exit 1;
fi

WIN_ID=`wmctrl -l | cut -d ' ' -f1 | head -n $1 | tail -n 1`

if [ "" = "$WIN_ID" ] ; then
    echo "fail to get win id of index $1"
    exit 1;
fi
wmctrl -i -a $WIN_ID
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.