xdotool如何选择桌面发送F5并返回?

Win*_*nix 5 command-line bash window-manager xdotool gnome-shell

听起来很简单;xdotool选择桌面,模拟F5按键并将焦点返回到调用窗口/程序。

谷歌搜索后虽然听起来不再简单。

我需要从 bash / gnome-shell 执行此操作。

有任何想法吗?


这个项目与这个 Q&A 相关,因为不同尺寸的显示器,图标从左屏幕掉成一个黑色的整体:

感谢Podesta 的帮助,我创建了此代码:

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
Run Code Online (Sandbox Code Playgroud)

这是屏幕的样子:

标志性 2 优化.gif

Pod*_*sta 5

@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
Run Code Online (Sandbox Code Playgroud)

xdotools在类似情况下可能有用的其他一些命令:

如果您的窗口管理器有显示桌面命令,那么最小化并恢复所有窗口会很有用。通常设置为ctrl+alt+d

xdotool key ctrl+alt+d
Run Code Online (Sandbox Code Playgroud)

如果您想保存当前活动的窗口,以便稍后将其恢复,您可以使用:

myWindow="$(xdotool getactivewindow)"
Run Code Online (Sandbox Code Playgroud)

Ti 最小化您可以使用的窗口。将其添加到循环中可以让您最小化所有窗口,作为 show dekstop 的替代方法。

xdotool windowminimize $(xdotool getactivewindow)
Run Code Online (Sandbox Code Playgroud)

要将您保存的活动窗口带回焦点:

xdotool windowactivate "$myWindow"
Run Code Online (Sandbox Code Playgroud)

要关闭活动窗口,请使用:

xdotool getactivewindow windowkill
Run Code Online (Sandbox Code Playgroud)

最重要的是,您可以在活动窗口中使用所有这些命令,您实际上可以搜索并应用于特定情况。例如,根据标题搜索此特定窗口。

xdotool search --desktop 0 --name "command line - xdotool" windowactivate
Run Code Online (Sandbox Code Playgroud)

有许多不同的搜索窗口的方法,基于标题、类别、它们是否可见等。它还可以操作窗口位置和鼠标。xdotol 的联机帮助页非常全面。将它们与 bash 脚本结合起来可以为实现大多数事情提供足够的自由。

  • 我已经用`.gif`更新了这个问题。当通过 show desktop 命令最小化窗口时,实际上很难记录屏幕。 (2认同)