18.04 (gnome) 工作空間 - 如何操作(例如任意重新排序)工作空間?

18.04 (gnome) 工作空間 - 如何操作(例如任意重新排序)工作空間?

Gnome 工作區使用起來非常方便,但我發現它們很難管理。例如:

  • 關閉工作區中的最後一個視窗會導致該工作區關閉(如果不是立即關閉,那麼很快就會關閉)
  • 新視窗只能插入到底部始終存在的空白工作區。
  • 移動工作區需要單獨移動每個窗口,如果工作區在預期過程中變空,則工作區將關閉。

我雖然存在但找不到的功能是:

  • 能夠抑制工作空間的自動關閉,也許可以用關閉(空)工作空間指令來替換。
  • 能夠旋轉工作區(因此空工作區可以放置在任何地方)
  • 能夠將任何工作區與其較低的鄰居交換

也許我只是對眾所周知的事實一無所知。或者,也許 Gnome 提供了一個用於這種行為程式設計的 API。或者也許這是不可能的。

請告知。


附錄:在選擇這個問題的答案幾天后,我發現了一個相對簡單的 API 來實現既定目標。提供該資訊以下作為一個新的答案。

答案1

註:回答我自己的問題-同時保留已接受的答案,因為它準確地反映了 Gnome 狀態。


有一個項目xdo工具它以 Ubuntu 18.04 託管包的形式方便地提供。它提供對桌面、視窗及其關係的讀寫存取。 (還有許多我沒有使用的其他功能。)

使用這個套件可以很簡單地編寫所需的功能。直接 CLI 沒什麼用,但是將它們連結到 Ubuntu 自訂快捷方式意味著我能夠使用按鍵移動選擇並上下移動單個桌面,同時使用 Gnomes 標準鳥瞰圖觀看所有桌面。

Gnome 標準鳥瞰可以通過“Super+a,Super+a”,然後將滑鼠移到螢幕右側,此時所有桌面將出現在垂直陣列中。

為了避免干擾Gnome,需要關閉Gnome的動態桌面並使用靜態桌面設定代替。使用靜態桌面在所選答案中建議。

我的完整的程式碼作為要點提供

作為範例,此程式碼摘錄用於交換桌面:

swaprelative(){
    nbr=$1
    ndt=$(xdotool get_num_desktops)
    if [[ $ndt -lt 2 ]] ; then return 0 ; fi
    adt=$(xdotool get_desktop)
    bdt=$((( adt + ndt + nbr) % ndt ))
    if [[ $bdt == $adt ]] ; then return 0; fi
    if [[ $bdt -lt 0 ]] ; then
        echo "relative neighbor value $nbr is out of bounds"
        return 1;
    fi
    xdotool search '.*' | while read w ; do
        if ! window_has_desktop $w ; then continue; fi
        wdt=$(xdotool get_desktop_for_window $w)
        if [[ $wdt -eq $adt ]] ; then
            xdotool set_desktop_for_window $w $bdt
        elif [[ $wdt -eq $bdt ]] ; then
            xdotool set_desktop_for_window $w $adt
        fi
    done
    xdotool set_desktop $bdt
}

必須強調的是,編碼如此簡單是由於該xdotool項目的強大功能。該項目不依賴侏儒,而是與並行操作侏儒訪問相同的X基元。它可能可以在許多不同的視窗管理器中使用,只要注意避免 WM 和 xdotool 之間的相互幹擾(例如,關閉 Gnome 中的動態桌面)。

答案2

在 GNOME Shell 中,預設情況下,人們無法在整個工作區及其包含的應用程式中移動。雖然這將是一個強大的功能,但我不知道具有此功能的 Linux 桌面環境。

對於API,GNOME Shell 具有擴充機制。這其實根本不是一個 API。它本質上是系統中的一個“(潛在的安全)漏洞”,開發人員可以在其中註入自己的 javascript 程式碼來更改 Shell 的行為。現有的許多 GNOME Shell 擴充說明了可以做什麼,在許多情況下都取得了巨大的成功。

就您期望的功能而言,情況如下:

能夠抑制工作空間的自動關閉,也許可以用關閉(空)工作空間指令來替換。
預設情況下,GNOME Shell 附帶動態工作空間。但是,可以關閉此功能,並且您可以設定多個固定工作區。為此,請安裝 (GNOME) Tweaks,然後在“工作空間”標籤上選擇“靜態工作空間”如圖所示

能夠旋轉工作區(因此空工作區可以放置在任何地方)
不幸的是,無法更改工作區(及其內容)的順序。您只能移動應用程式。當然,對於靜態工作區,空工作區仍然是空的。

能夠將任何工作區與其較低的鄰居交換
這取決於你的意思。如果您的意思是再次更改工作區的順序,請參閱上面的觀點。如果您的意思是快速切換工作區,那麼可以使用快速鍵Ctrl+ Alt+ Up/DownSuper+ PgDn/輕鬆實現PgUp

切換到靜態工作區可以讓您更好地控制工作區的位置,但限制是您無法移動整個工作區。

使用靜態工作區增強工作流程的一些技巧

  • 您可以安裝工作區指示器GNOME Shell 擴充功能提供您目前所在工作空間的指示器。如果您願意,該擴充功能可讓您重新命名工作區(例如“1 - 瀏覽”而不是“1”)。

  • 您可以配置熱鍵以快速切換到特定工作區或行動應用程序,例如:

    gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-4 "['<Super>4']"
    gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-4 "['<Super><Shift>4']"
    

這些命令將設定一個熱鍵Super+4立即將您帶到 WS 4,以及一個熱鍵Super+ Shift+4將應用程式移至 WS 4(與平鋪視窗管理器 i3 中的工作方式非常相似)。

答案3

能夠將任何工作區與其較低的鄰居交換

有一個擴充功能允許您重新排序與 Gnome 3.38 相容的工作區:Reorder Workspaces

https://extensions.gnome.org/extension/3685/reorder-workspaces/

請注意,捷徑僅適用於工作區概覽。我已經打開了一個問題,以便從視窗視圖中實現:https://github.com/jeremiahmegel/gnome-reorder-workspaces/issues/5

相關內容