有没有办法将窗口复制到多个工作区。例如,如果 Chrome 在工作区 1 的桌面上打开,我想将其复制到工作区 X,而不是移动它,这样,当我切换到工作区 X 时,Chrome 窗口也会出现在那里。
建议不必仅限于操作系统解决方案。如果有人能建议一个容易获得的免费程序,那也会很有帮助。
当前操作系统版本:Ubuntu 14.04-amd64
答案1
答案2
我创建了以下 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作为脚本的快捷方式。
在焦点窗口上,按Super+ Z。将弹出一个窗口,您可以在其中输入希望窗口出现的工作区,用空格隔开, 如下所示。
在聚焦同一窗口的情况下再次按下Super+Z它将恢复正常,即仅出现在一个工作区中。
该脚本应该适用于所有桌面环境。
请随意提出任何更改!