Рабочие пространства 18.04 (gnome) - Как управлять (например, произвольно переупорядочивать) рабочими пространствами?

Рабочие пространства Gnome очень удобны в использовании, но я считаю, что ими очень трудно управлять. Например:

  • Закрытие последнего окна в рабочей области приводит к закрытию этой рабочей области (если не сразу, то вскоре)
  • Новые окна могут быть вставлены только в всегда существующую пустую рабочую область внизу.
  • Перемещение рабочих пространств потребует перемещения каждого окна по отдельности, и если рабочее пространство станет пустым во время этого намеченного процесса, рабочее пространство закроется.

Возможности, которые я, хотя и существует, но не могу найти:

  • Способность подавлять автоматическое закрытие рабочих пространств, возможно, заменить на закрытое (пустое) рабочее пространство. команда.
  • Возможность вращать рабочие пространства (чтобы пустое рабочее пространство можно было разместить где угодно)
  • Возможность поменять любое рабочее пространство с его нижним соседом

Может быть, я просто не знаю об общеизвестных фактах , Или, может быть, Gnome предлагает API для программирования такого поведения. Или, может быть, это невозможно.

Пожалуйста, сообщите.


Приложение. Через несколько дней после выбора ответа на этот вопрос я нашел относительно простой API для достижения поставленных целей. Эта информация предоставляется ниже в качестве нового ответа.

1
задан 26 June 2019 в 22:01

2 ответа

В GNOME Shell по умолчанию нельзя перемещаться по всем рабочим областям с приложениями, которые они содержат. Хотя это было бы мощной функцией, я не знаю, в каких средах Linux это предусмотрено.

Что касается API, в GNOME Shell есть механизм расширений. Это на самом деле не API вообще. По сути, это «дыра (потенциальной безопасности)» в системе, где разработчики могут внедрить свой собственный код javascript, чтобы изменить поведение командной консоли. Существующие многочисленные расширения GNOME Shell иллюстрируют, что можно сделать, во многих случаях с большим успехом.

Что касается ожидаемых функций, ситуация выглядит следующим образом:

Возможность подавления автоматического закрытия рабочих пространств, возможно, для замены на закрытое (пустое). ) -workspace command.
По умолчанию GNOME Shell поставляется с динамическими рабочими пространствами. Это, однако, может быть отключено, и вы можете установить количество фиксированных рабочих областей. Для этого установите (GNOME) Tweaks и выберите «Статические рабочие пространства» на вкладке «Рабочие пространства» , как показано здесь .

Возможность вращать рабочие пространства (чтобы пустое рабочее пространство можно было разместить где угодно)
Нет возможности изменить порядок рабочих пространств (и их содержимое) , к несчастью. Вы можете только перемещать приложения. Конечно, в статических рабочих пространствах пустое рабочее пространство остается пустым.

Возможность поменять любое рабочее пространство с его нижним соседом
Это зависит от того, что вы имеете в виду. Если вы имеете в виду снова изменить порядок рабочих пространств, то смотрите пункт выше. Если вы имеете в виду быстрое переключение рабочих пространств, то это легко достигается с помощью сочетаний клавиш Ctrl + Alt + Вверх / Вниз или Super + 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).

2
ответ дан 26 June 2019 в 22:01

Примечание: отвечая на мой собственный вопрос - , оставляя принятый ответ, поскольку он точно отражает статус гнома.


Существует проект xdotool , который удобно предоставлять в виде управляемой упаковки Ubuntu 18.04. Он предлагает доступ для чтения и записи к рабочим столам, окнам и их отношениям. (Также много других функций, которые я не использовал.)

Используя этот пакет, было просто кодировать нужные функции. Прямой интерфейс командной строки бесполезен, но связывать их с пользовательскими ярлыками 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. Этот проект не зависит от Gnome , а работает параллельно с Gnome , получающим доступ к тем же примитивам X . Скорее всего, его можно использовать в нескольких различных оконных менеджерах, при условии, что будут предприняты меры для предотвращения взаимных помех между WM и xdotool (например, отключение динамических рабочих столов в Gnome).

1
ответ дан 26 June 2019 в 22:01

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

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