Скопируйте окно в несколько рабочих пространств

Есть ли способ скопировать окно в более чем одно рабочее пространство. Например. если chrome открыт на рабочем столе Workspace 1, вместо того, чтобы перемещать его, я хотел бы скопировать его в Workspace X, чтобы при переключении в Workspace X там также присутствовало окно chrome.

Предложения не должны ограничиваться только решениями для ОС. Если кто-то может предложить легкодоступную бесплатную программу, это тоже очень поможет.

Текущая версия ОС: Ubuntu 14.04-amd64

1
задан 10 June 2016 в 07:42

2 ответа

Kubuntu:

отображение окна на нескольких дестопах работает из коробки. Просто щелкните правой кнопкой мыши значок приложения на панели задач

screenshot

и выберите «Переместить на рабочий стол» >> «Все рабочие столы»

. Таким образом, окно будет отображаться на каждом «рабочем столе» (формулировка «переместить» в контекстном меню немного вводит в заблуждение).

Gnome

Оказывается, это тоже работает из коробки

Щелкните правой кнопкой мыши заголовок окна и выберите «Всегда в видимой рабочей области»

enter image description here

3
ответ дан 29 December 2019 в 21:28

Я создал следующий скрипт bash, который, как мне кажется, примерно соответствует тому, что хочет OP. Он не копирует выбранное окно в выбранные рабочие области. Он скорее автоматически перемещает выбранное окно в выбранные рабочие области при изменении последних.

#!/bin/bash
# get id of window
id=$(xwininfo -id $(xdotool getwindowfocus) | grep "Window id" | cut -d' ' -f4)
# get pid of script
script_pid=$(echo $$)

# file for temporarily storing id-pid pairs
temp="/tmp/ids-pids.txt"
# create the file if it does not exist
touch $temp

# check if window id already exists in temp
# if yes, kill the script and remove the window id entry
# if no, add a window id-script pid entry
# this is used as a toggle for turning the script on/off with the same keystroke
if grep -q $id $temp; then
    kill $(grep $id $temp | cut -d' ' -f2)
    sed -i "/$id/d" $temp 
    kill $$
else
    echo $id $script_pid >> $temp
fi

# enter the workspaces numbers that the window can appear on as an array
# input is space-delimited
IFS=' ' read -r -a array < <( zenity --entry \
                --width 400 \
                --title="Window on multiple workspaces" \
                --text="Window on workspaces:" )

# if the user cancels text entry or inputs nothing, then exit and kill the script
if [ ${#array[@]} -eq 0 ]; then
    sed -i "/$id/d" $temp 
    kill $$
fi

while true
do
    # get current workspace
    workspace=$(wmctrl -d | grep \* | cut -d' ' -f1)
    # move window to the workspace if it is in the allowed workspaces array
    if [[ "${array[@]}" =~ "${workspace}" ]]; then 
        wmctrl -i -r $id -t $workspace
    fi

    # check if window is closed
    # if yes, remove its id-pid entry and kill the script 
    if echo $(xwininfo -id $id 2>&1) | grep -q "X Error:"; then
        sed -i "/$id/d" $temp
        kill $(grep $id $temp | cut -d' ' -f2)
        kill $$
    fi

    # sleep is used so that the command won't run continuously
    sleep 1
done

Как использовать

  • Во-первых, убедитесь, что у вас установлены программы, которые используются в этом скрипте:

    sudo apt install xdotool wmctrl zenity
    
  • Скопируйте и вставьте скрипт в файл .sh на своем компьютере, например, в домашнюю папку (/home/user/window_workspaces.sh).

  • Сделать его исполняемым:

    chmod u+x /home/user/window_workspaces.sh
    
  • Назначьте скрипт ярлыку. В GNOME откройте Обзор приложенийНастройкиУстройстваКлавиатура → нажмите «+» внизу и введите имя ярлыка. , путь к скрипту и ярлык, который вы хотите использовать, как показано на рисунке ниже. Я выбрал Super+Z в качестве ярлыка для скрипта.

    GNOME shortcut

  • В активном окне нажмите Super+Z. Появится всплывающее окно, в котором вы можете ввести рабочие области, в которых вы хотите, чтобы ваше окно отображалось, , разделенные пробелом , как показано ниже.

    Workspaces entry

  • Нажмите Super+Z еще раз, удерживая фокус на том же окне, и оно вернется в нормальное состояние, т. е. появится только в одном рабочем пространстве.

Сценарий должен работать во всех средах рабочего стола.

Не стесняйтесь предлагать любые изменения!

2
ответ дан 30 December 2019 в 15:28

Другие вопросы по тегам:

Похожие вопросы: