Apakah ada cara untuk mengaktifkan tab chrome tertentu melalui bash?

10

Misalkan, misalnya, saya memiliki jendela chrome aktif dengan gmail dibuka di suatu tempat di antara tab-nya (tetapi tidak harus tab aktif).

Pertanyaan: Apakah ada cara untuk mengaktifkan tab gmail dari baris perintah?

DD131
sumber

Jawaban:

5

Skrip berikut berfungsi untuk saya, tetapi mengharuskan Anda hanya memiliki satu jendela Chrome, dan jendela itu harus aktif. Seharusnya mudah untuk men-tweak atau memperbaikinya.

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

Mungkin ada banyak cara lain untuk melakukan ini:

  • Menggunakan Chromium dan memodifikasi kode sumbernya
  • Menulis ekstensi untuk Chrome yang akan beralih ke tab kanan ketika kondisi tertentu terpenuhi
  • Menggunakan alat seperti xmacro
  • Dll
pengguna2718996
sumber
Catatan: xwininfoakan menerima desimal $WINID.
meuh
Solusi ini memerlukan kode untuk mencegah loop tak terbatas ketika tab Gmail tidak terbuka.
Gonki
1

Iya. Saat ini saya melakukannya seperti ini:

1) , Anda harus menginstal jq untuk dipusingkan dengan data tab yang akan Anda makan ketika menjalankan skrip yang akan mengaktifkan tab yang saat ini terbuka di kromium.


2) kromium harus dijalankan dengan debugging jarak jauh dihidupkan. tutup semua instance chromium, dan jalankan perintah ini alih-alih hanya chromiumdi terminal jika tidak proses ini tidak akan bekerja:

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


3) gunakan skrip ini simpan sebagai "tindakan", chmod +xdan letakkan di direktori bin pengguna Anda:

#!/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

arahkan ke cnn.com dan beberapa tab lainnya dan simpan cnn.com di latar belakang, beralih ke terminal dan coba perintah seperti ini:

act cnn

harus mengaktifkan jendela chromium dan beralih ke tab cnn. beri tahu saya jika itu berhasil!

Danny Z
sumber
0

Di linux (Debian) saya menggunakan google-chrome URL(contoh:google-chrome google.com :). Tab baru akan terbuka.

Ketik google-chrome --helpuntuk deskripsi yang lebih detail.


Saya menemukan ini untuk mac (tetapi tidak mencoba): chrome-cli open <url> -n perintah.

Itu tergantung dari https://github.com/prasmussen/chrome-cli

Enrique René
sumber
0

Kode perl ini berfungsi untuk saya: misalnya, findTab.pl Chrome Gmail ,. Itu membuat layar flip banyak dan dapat mengubah tab di jendela lain (ini memeriksa 12 kali pada teori bahwa ini harus meninggalkan jendela Anda pada tab asli jika tidak menemukan apa pun, asalkan Anda memiliki <5 tab di jendela).

Ini tidak berfungsi pada sistem Ubuntu saya jika Anda tidak menggunakannya windowactivatesebelumnyakey ; ada hubungannya dengan protokol keamanan yang sangat lama.

Saya tidak berpikir ada jaminan apa yang akan ditemukan jika ada lebih dari satu hal untuk ditemukan; Saya menduga berdasarkan pengalaman xdotool lain bahwa ia cenderung menemukan hal-hal yang berbeda ketika digunakan berulang kali.

perl mungkin bukan pilihan yang baik untuk skrip ini, tapi saya tidak tahu 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;
}
Jonathan Dushoff
sumber
0

Yah, tab gmail saya disematkan dan tetap pertama. Naskah kecil ini membantu saya

#!/bin/bash                                                                                                              

wmctrl -a $1                                                                                                             
xdotool search --onlyvisible --class $1 key Alt+1

./activate_mail.sh Chromium
./activate_mail.sh Firefox

Ini bekerja di lingkungan i3wm saya.

pengguna1278890
sumber