Это звучит простым; xdotool
выбирает рабочий стол, моделирует нажатие клавиши F5 и возвращает фокус вызову окна / программа.
После поиска с помощью Google, хотя это не звучит простым больше.
Я должен сделать это от удара / оболочка гнома.
Какие-либо идеи?
Этот проект связан с этим Вопросы и ответы, где значки привозят левый экран в черное целое из-за разного размера мониторов:
Благодаря справке Подесты я создал этот код:
TestIcons () {
[[ $TestSeconds == "" ]] || [[ $TestSeconds == 0 ]] && TestSeconds=5
local i Position File
for (( i=0; i<${#IconsArr[@]}; i=i+ICON_FLD_CNT )) ; do
File="$ICONS_DIR"/"${IconsArr[((i+ICON_NAME_NDX))]}"
Position="${IconsArr[((i+ICON_COL_NDX))]},${IconsArr[((i+ICON_ROW_NDX))]}"
gvfs-set-attribute -t string "$File" \
'metadata::nautilus-icon-position' "$Position"
done
wmctrl -k on # Show desktop
xdotool key F5 # Refresh desktop (show icon new positions)
sleep $TestSeconds # Pause for view
wmctrl -k off # Restore windows
for (( i=0; i<${#OldIconsArr[@]}; i=i+ICON_FLD_CNT )) ; do
File="$ICONS_DIR"/"${OldIconsArr[((i+ICON_NAME_NDX))]}"
Position="${OldIconsArr[((i+ICON_COL_NDX))]},${OldIconsArr[((i+ICON_ROW_NDX))]}"
gvfs-set-attribute -t string "$File" \
'metadata::nautilus-icon-position' "$Position"
done
wmctrl -k on # Show desktop
xdotool key F5 # Refresh desktop (show icon new positions)
wmctrl -k off # Restore windows
} # TestIcons
Это - то, на что похож экран:
Скрипт ниже работы @ WinEunuuchs2Unix и является окончательным решением. Мой оригинальный ответ в конце.
#!/bin/bash
TestIcons () {
[[ $TestSeconds == "" ]] || [[ $TestSeconds == 0 ]] && TestSeconds=5
local i Position File
for (( i=0; i<${#IconsArr[@]}; i=i+ICON_FLD_CNT )) ; do
File="$ICONS_DIR"/"${IconsArr[((i+ICON_NAME_NDX))]}"
Position="${IconsArr[((i+ICON_COL_NDX))]},${IconsArr[((i+ICON_ROW_NDX))]}"
gvfs-set-attribute -t string "$File" \
'metadata::nautilus-icon-position' "$Position"
done
wmctrl -k on # Show desktop
xdotool key F5 # Refresh desktop (show icon new positions)
sleep $TestSeconds # Pause for view
wmctrl -k off # Restore windows
for (( i=0; i<${#OldIconsArr[@]}; i=i+ICON_FLD_CNT )) ; do
File="$ICONS_DIR"/"${OldIconsArr[((i+ICON_NAME_NDX))]}"
Position="${OldIconsArr[((i+ICON_COL_NDX))]},${OldIconsArr[((i+ICON_ROW_NDX))]}"
gvfs-set-attribute -t string "$File" \
'metadata::nautilus-icon-position' "$Position"
done
wmctrl -k on # Show desktop
xdotool key F5 # Refresh desktop (show icon new positions)
wmctrl -k off # Restore windows
}
TestIcons
Несколько других xdotools
команд, которые могут быть полезны в аналогичной ситуации:
Если в вашем оконном менеджере есть команда show desktop, это может быть полезно свернуть и вернуть все окна. Обычно для него установлено значение ctrl+alt+d
:
xdotool key ctrl+alt+d
Если вы хотите сохранить текущее активное окно, чтобы позже восстановить его, вы можете использовать:
myWindow="$(xdotool getactivewindow)"
Чтобы минимизировать окно, которое вы можете использовать. Добавление его в цикл позволяет минимизировать все окна в качестве альтернативы show dekstop.
xdotool windowminimize $(xdotool getactivewindow)
Чтобы вернуть активное окно, которое вы сохранили, обратно в фокус:
xdotool windowactivate "$myWindow"
Чтобы закрыть активное окно, используйте:
xdotool getactivewindow windowkill
И самое главное, все эти команды что вы можете использовать с активным окном, вы можете на самом деле искать и применять к конкретным случаям. Например, поиск этого конкретного окна на основе заголовка.
xdotool search --desktop 0 --name "command line - xdotool" windowactivate
Существует много разных способов поиска окон, основанных на заголовке, классе, если они видны и т. Д. Он также может манипулировать как положениями окон, так и мышью. Man-страница для xdotol очень полная. Объединение их со скриптом bash дало бы большую свободу для достижения большинства целей.