Bash를 통해 특정 크롬 탭을 활성화하는 방법이 있습니까?

Bash를 통해 특정 크롬 탭을 활성화하는 방법이 있습니까?

예를 들어, Chrome 창이 활성화되어 있고 해당 탭 어딘가에 Gmail이 열려 있다고 가정해 보겠습니다(그러나 반드시 활성 탭일 필요는 없음).

질문:활성화할 수 있는 방법이 있나요Gmail 라벨명령줄에서?

답변1

예. 나는 현재 다음을 수행합니다.

1)당신은 설치해야합니다탭 데이터를 엉망으로 만들기 위해 Chromium에서 현재 열려 있는 탭에 대한 스크립트를 호출할 때 피드백을 받습니다. 또한 설치해야합니다크롬 원격 인터페이스Chromium의 백그라운드 -> 포그라운드에서 탭 활성화가 완료되었습니다.


2) 원격 디버깅을 활성화한 상태에서 Chromium을 실행해야 합니다. chromium의 모든 인스턴스를 닫고 chromium터미널에서 실행하는 대신 이 명령을 실행하십시오 . 그렇지 않으면 이 프로세스가 작동하지 않습니다.

/usr/bin/chromium --remote-debugging-port=9222 &


삼)이 기본 스크립트를 예로 사용하여 로 저장하고 act사용자 chmod +x의 bin 디렉터리에 저장합니다. 예를 들어, 저는 bash 스크립트를 사용합니다. zsh 사용자라면 다음과 같이 이식할 수 있습니다.

#!/usr/bin/env bash

TABS_JSON=$(chrome-remote-interface list | sed -e "s/^'//" -e "s/'$//" | jq -r 'map(select(.type == "page") | {id: .id, title: .title})')

if [[ -z $@ ]]; then
    TAB_NAMES=$(echo "$TABS_JSON" | jq -r 'map(.title) | .[]')

    echo "$TAB_NAMES"
else
    TAB=$*

    TAB_ID=$(echo "$TABS_JSON" | jq -r "map(select(.title | match(\"${TAB}\";\"i\")) | .id) | .[]")

        chrome-remote-interface activate "$TAB_ID" >/dev/null

    #you might need wmctrl if window does not activate. 
    #wmctrl -a chromium
fi

cnn.com 및 기타 몇 가지 탭으로 이동하고 cnn.com을 백그라운드에 두고 터미널로 전환하여 다음 명령을 실행해 보십시오.

act cnn

크롬 창을 활성화하고 cnn 탭으로 전환해야 합니다. 작업 흐름에서 rofi 메뉴 또는 fzf 변형과 자유롭게 추가로 통합하거나 열려 있는 탭 목록을 활성 창의 전역 풀에 넣을 수도 있습니다.

답변2

다음 스크립트는 나를 위해 일했습니다.하지만Chrome 창이 하나만 있고 활성화되어 있어야 합니다. 수정하거나 개선하는 것이 쉬워야 합니다.

WINID=$(xdotool search --name 'Google Chrome' | head -n 1)
WINID_HEX=$(printf "0x%x" $WINID)

while true
do
        xwininfo -id $WINID_HEX | grep Gmail
        if [ "$?" -ne 0 ]
        then
                xdotool key --window $WINID ctrl+Tab
        else
                break
        fi
        sleep 2
done

이를 수행하는 다른 많은 방법이 있을 수 있습니다.

  • Chromium 사용 및 소스 코드 수정
  • 특정 조건이 충족되면 올바른 탭으로 전환하는 Chrome용 확장 프로그램을 작성하세요.
  • xmacro와 같은 도구를 사용하십시오.
  • 등.

답변3

조정했어요제프리스나에게는 효과가 없었으므로 대답하십시오.

  • wmctrl -lx모든 창과 해당 제목을 가져오는 데 사용됩니다. 현재 탭 제목은 창 탭 이름 내에 있습니다.
  • wmctrl -ia크롬 창을 활성화하는 데 사용됩니다.

이것이 결과입니다.

function ctab() {

  # Activate the chrome window
  wmctrl -ia "$(wmctrl -lx | grep google-chrome | awk '{ print $1}')"

  # Create a while loop that continues until it finds the correct tab.
  # Note that this will go on forever if the tab is not found
  while true; do
    
    # Check the current windows title (which includes the tab title)
    result="$(wmctrl -lx | grep google-chrome | grep "@gmail.com")"
    
    # if the title contains @gmail then exit
    [ -n "$result" ] && break 

    # If it is the incorrect title then change to the next tab
    WINID=$(xdotool search --name 'Google Chrome' | head -n 1)
    xdotool key --window $WINID ctrl+Tab

  done
}

답변4

이 Perl 코드는 저에게 효과적이었습니다. 예를 들어 findTab.pl Chrome Gmail.it는 화면을 여러 번 뒤집고 다른 창에서 탭을 변경할 수 있습니다(이론적으로 창 카드에 5개 미만의 옵션이 있는 한 아무 것도 발견되지 않으면 12번 확인합니다). , 이렇게 하면 창을 원래 탭) 창에 유지해야 합니다.

windowactivate이전에 사용해 본 적이 없다면 key매우 오래된 보안 프로토콜과 관련된 Ubuntu 시스템에서 작동하지 않은 것입니다.

보장은 없는 것 같아요무엇다른 xdotools에 대한 경험을 바탕으로 찾을 것이 두 개 이상 있으면 찾을 것입니다. 반복적으로 사용하면 다른 것을 찾을 수 있을 것 같습니다.

Perl은 아마도 이 스크립트에 적합한 선택이 아닐 것입니다. 그러나 저는 bash를 모릅니다.

#! /usr/bin/perl
## findTab.pl
## usage findTab appName tabName
use strict;

my $maxTabs=12;

my ($app, $tab) = @ARGV;

my @wins = split /\s+/, `xdotool search --desktop 0 --name $app`;

foreach my $win (@wins){
    my $title;
    for (my $i=0;$i<$maxTabs;$i++){
        system ("xdotool windowactivate $win");
        $title = `xwininfo -id $win | grep $tab`;
        last if $title;
        system("xdotool key --window $win ctrl+Page_Down");
    }
    last if $title;
}

관련 정보