Window manager i3

Менеджер окон i3.

Содержание

1 Общая информация

2 Репозиторий конфигурации

3 Файл конфигурации

  • Файлы конфигурации просматриваются в следующем порядке:
    • $XDG_CONFIG_HOME/i3/config (~/.config/i3/config);
    • ~/.i3/config;
    • $XDG_CONFIG_DIRS/i3/config (/etc/xdg/i3/config);
    • /etc/i3/config.
  • Начиная с версии 4.20, можно подключать другие файлы конфигурации из основного файла конфигурации i3.
    • Примеры использования директивы include:
      # Тильда преобразуется в домашний каталог пользователя
      include ~/.config/i3/assignments.conf
      
      # Переменные среды разыменовываются
      include $HOME/.config/i3/assignments.conf
      
      # Символы подстановки раскрываются
      include ~/.config/i3/config.d/*.conf
      
      # Можно выполнять команду
      include ~/.config/i3/`hostname`.conf
      
      # Каждый путь загружается только один раз
      include ~/.config/i3/config
      
      # Относительные пути интерпретируются относительно каталога конфигурационного файла
      include assignments.conf
      

4 Навигация

4.1 Клавиша-модификатор

  • В качестве модификатора обычно используется:
    • Alt:
      set $mod Mod1
      
    • Super (Клавиша со значком Windows):
      set $mod Mod4
      
    • Предпочитаю Super, чтобы не конфликтовать с Emacs.

4.2 Основные комбинации клавиш

  • Mod + Enter: открыть терминал.

4.3 Перемещение фокуса

  • Фокус можно перемещать как с помощью стрелок, так и с помощью буквенных клавиш, как в редакторе vi.
    • Mod + h или Mod + Left: сдвиг фокуса влево.
    • Mod + j или Mod + Down: сдвиг фокуса вниз.
    • Mod + k или Mod + Up: сдвиг фокуса вверх.
    • Mod + l или Mod + Right: сдвиг фокуса вправо.
  • Конфигурация выглядит следующим образом:
    ## Home row direction keys, like vim
    set $left h
    set $down j
    set $up k
    set $right l
    ## Move your focus around
    bindsym $mod+$left focus left
    bindsym $mod+$down focus down
    bindsym $mod+$up focus up
    bindsym $mod+$right focus right
    ## Or use $mod+[up|down|left|right]
    bindsym $mod+Left focus left
    bindsym $mod+Down focus down
    bindsym $mod+Up focus up
    bindsym $mod+Right focus right
    
  • Впрочем, следует заметить, что также могут использоваться и другие соглашения:
    • j: влево;
    • k: вниз;
    • l: вверх;
    • ;: вправо.
  • Поскольку в данном менеджере окон поддерживаются контейнеры, то можно переключить фокус на родительский контейнер:
    • Mod + a: переключить фокус на родительский контейнер.
    • Конфигурация:
      ## Move focus to the parent container
      bindsym $mod+a focus parent
      
  • Mod + Space: переключить режим фокуса.

4.4 Перемещение окон

  • Делается аналогично перемещению фокуса, но с добавлением модификатора Shift:
    • Mod + Shift + h или Mod + Shift + Left: перемещение влево;
    • Mod + Shift + j или Mod + Shift + Down: перемещение вниз;
    • Mod + Shift + k или Mod + Shift + Up: перемещение вверх;
    • Mod + Shift + l или Mod + Shift + Right: перемещение вправо.
  • Конфигурация выглядит следующим образом:
    ## Move the focused window with the same, but add Shift
    bindsym $mod+Shift+$left move left
    bindsym $mod+Shift+$down move down
    bindsym $mod+Shift+$up move up
    bindsym $mod+Shift+$right move right
    ## Ditto, with arrow keys
    bindsym $mod+Shift+Left move left
    bindsym $mod+Shift+Down move down
    bindsym $mod+Shift+Up move up
    bindsym $mod+Shift+Right move right
    

4.5 Modifying windows

  • Mod + f toggle fullscreen
  • Mod + v split a window vertically
  • Mod + h split a window horizontally
  • Mod + r resize mode

4.6 Структура расположения контейнеров

  • Поддерживаются следующие расположения контейнеров:
    • Mod + e: переключение разделённого расположения (split layout);
    • Mod + s: стековое размещение (stacking layout);
    • Mod + w: размещение с табами (tabbed layout).
  • Конфигурация:
    ## Switch the current container between different layout styles
    bindsym $mod+s layout stacking
    bindsym $mod+w layout tabbed
    bindsym $mod+e layout toggle split
    
  • Для раскладки по умолчанию я использую табы:
    ### Layout mode for new containers
    ## default|stacking|tabbed
    workspace_layout tabbed
    

4.7 Floating

  • Mod + Shift + Space toggle floating
  • Mod + Left click drag floating

4.8 Рабочие области (workspaces)

  • Сконфигурим рабочие области:
    ## Define names for workspaces
    set $ws1    1
    set $ws2    2
    set $ws3    3
    set $ws4    4
    set $ws5    5
    set $ws6    6
    set $ws7    7
    set $ws8    8
    set $ws9    9
    set $ws10   10
    
  • Mod + 09: переключиться на соответствующую рабочую область:
    ## Switch to workspace
    bindsym $mod+1 workspace $ws1
    bindsym $mod+2 workspace $ws2
    bindsym $mod+3 workspace $ws3
    bindsym $mod+4 workspace $ws4
    bindsym $mod+5 workspace $ws5
    bindsym $mod+6 workspace $ws6
    bindsym $mod+7 workspace $ws7
    bindsym $mod+8 workspace $ws8
    bindsym $mod+9 workspace $ws9
    bindsym $mod+0 workspace $ws10
    
  • Mod + Shift + 09: перенести окно на соответствующую рабочую область:
    ## Move focused container to workspace
    bindsym $mod+Shift+1 move container to workspace $ws1
    bindsym $mod+Shift+2 move container to workspace $ws2
    bindsym $mod+Shift+3 move container to workspace $ws3
    bindsym $mod+Shift+4 move container to workspace $ws4
    bindsym $mod+Shift+5 move container to workspace $ws5
    bindsym $mod+Shift+6 move container to workspace $ws6
    bindsym $mod+Shift+7 move container to workspace $ws7
    bindsym $mod+Shift+8 move container to workspace $ws8
    bindsym $mod+Shift+9 move container to workspace $ws9
    bindsym $mod+Shift+0 move container to workspace $ws10
    

4.9 Opening applications / Closing windows

  • Mod + d open application launcher (dmenu)
  • Mod + Shift + q kill a window

4.10 Выход/Перезапуск

  • Mod + Shift + c: перечитать конфигурационный файл.
    ## ~/.config/i3/config
    
    ## reload the configuration file
    bindsym $mod+Shift+c reload
    
  • Mod + Shift + r: перестартовать i3, сохранив сессию.
    ## ~/.config/i3/config
    
    ## restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
    bindsym $mod+Shift+r restart
    
  • Mod + Shift + e: выход из i3.
    ## ~/.config/i3/config
    
    ## exit i3 (logs you out of your X session)
    bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"
    

5 Настройка

5.1 Терминал

  • В качестве терминала я использую kitty.

  • Конфигурация запуска терминала:

    set $term kitty
    bindsym $mod+Return exec $term
    
    • В этом случае запускается одно окно терминала.
  • Для работы я использую специальную настройку сессии терминала. Я её запускаю при входе в сессию. Для этого я приспособил комбинацию Mod + Shift + Enter:

    bindsym $mod+Shift+Return exec kitty --session ~/.config/kitty/startup
    

5.2 Управление окном с помощью мышки

  • Можно управлять окнами с помощью мышки.

  • Привязка осуществляется следующей командой:

    bindsym [--release] [--border] [--whole-window] [--exclude-titlebar] [<Modifiers>+]button<n> command
    
    • По умолчанию привязка запускается только при нажатии на строку заголовка окна.
    • Если указан флаг --release, он запустится, когда кнопка мыши будет отпущена.
    • Если указан флаг --whole-window, то привязка также будет выполняться при щелчке по любой части окна, за исключением границы.
    • Чтобы привязка выполнялась при щелчке границы, нужно указать флаг --border.
    • Если задан флаг --exclude-titlebar, заголовок не будет учитываться для привязки клавиш.
  • Примеры.

    • Средняя кнопка на заголовке закрывает окно:
      bindsym --release button2 kill
      
    • Средняя кнопка и модификатор над любой частью окна закрывает окно:
      bindsym --whole-window $mod+button2 kill
      
    • Правая кнопка мыши переключает плавающий режим:
      bindsym button3 floating toggle
      bindsym $mod+button3 floating toggle
      
    • Боковые кнопки мыши перемещают окно:
      bindsym button9 move left
      bindsym button8 move right
      

5.3 Строка статуса

5.3.1 i3bar

  • Отрисовку панели осуществляет утилита i3bar.
  • Отображается вверху или внизу экрана.
  • Содержит:
    • область с кнопками переключения рабочих областей i3;
    • системную строку, генерируемую при помощи i3status или аналогов;
    • системный трей с иконками программ.
  • В конфигурационном файле задаётся следующим образом (https://i3wm.org/docs/userguide.html#_configuring_i3bar):
    # ~/.config/i3/config -*- mode: conf-unix; -*-
    ## Start i3bar to display a workspace bar
    bar {
        status_command i3status
        position top
    }
    
  1. Поддержка иконок в i3bar

    • В i3bar можно использовать шрифты иконок (см. Моноширинные шрифты).
    • Наиболее распространённым является шрифт Font Awesome.
    • Установка:
      • Gentoo
        emerge media-fonts/fontawesome
        
    • Для вставки шрифта в файл можно использовать список кодов для иконок https://fontawesome.com/cheatsheet.
    • Шрифт лучше явно обозначить в конфигурации:
      ## ~/.config/i3/config
      bar {
          font pango:Source Sans Pro, FontAwesome 5 Free 10
      }
      
    • Для набора символа по его коду следует использовать конфигурации клавиш. Например, для набора символа с кодом 0xf004, требуется набрать:
      • приложения на основе GTK: Ctrl + Shift + u, f004, Enter;
      • emacs: Ctrl + x, 8, Enter, f004, Enter;
      • vim: Ctrl + v, uf004;
      • urxvt: удерживая Ctrl + Shift, наберите f004.
  1. i3status

    • Использовано https://igancev.ru/2020-05-11-configuring-i3status-in-i3wm.
    • i3status генерирует строку состояния для i3bar.
    • Содержит встроенные модули:
      • IPv6 — получает и выводит IPv6 адрес.
      • Disk — отображает информацию о занятом и свободном месте в файловой системе.
      • Run-watch — мониторинг определённого процесса в системе.
      • Path-exists — проверяет на существование путь в файловой системе.
      • Wireless — позволяет выводить подключения к WIFI сети, уровень сигнала, имя точки доступа.
      • Ethernet — предоставляет IP адрес и скорость соединения сетевого интерфейса.
      • Battery — показ уровня заряда батареи.
      • CPU-Temperature — показ температуры процессора.
      • CPU Usage — использование процессора в процентах.
      • Memory — использование оперативной памяти.
      • Load — среднее значение загрузки системы за 1, 5 и 15 минут (Load Overage).
      • Time — время в текущей временной зоне.
      • TzTime — время в заданной временной зоне.
      • DDate — дата.
      • Volume — управление громкостью звука.
      • File Contents — вывод содержимого указанного файла.
    • Модули в строке можно переиспользовать по нескольку раз, управляя порядком вывода.
    • Конфигурацию условно можно разделить на 3 части:
      • блок general — содержит общие параметры;
      • переменная order — в неё записывается порядок вывода интересующих модулей;
      • блоки конфигурации модулей — непосредственно настройки самих блоков с метриками.
    • В конфигурации i3bar задаётся конфигурационный файл для i3status:
      # ~/.config/i3/config -*- mode: conf-unix; -*-
      ## Start i3bar to display a workspace bar
      bar {
          font pango:Source Sans Pro, FontAwesome 5 Free 10
          status_command	i3status --config ~/.config/i3/i3status/config
          position		top
      }
      
    • Структура информационной панели задаётся в конфигурационном файле:
      ### -*- mode: conf-unix; -*-
      ## ~/.config/i3/i3status/config
      
      general {
          colors = true # включение/выключение поддержки цветов true/false
          interval = 1 # интервал обновления строки статуса, в секундах
          output_format = "i3bar" # формат вывода, устанавливаем i3bar (JSON)
      }
      
      # порядок вывода модулей
      order += "run_watch openvpn"
      order += "run_watch openconnect"
      order += "volume master"
      order += "wireless _first_"
      order += "battery all"
      order += "disk /"
      order += "memory"
      order += "cpu_usage"
      order += "cpu_temperature 0"
      order += "tztime local"
      
      # отслеживание процесса openvpn
      # служит как индикатор работы openvpn клиента
      # при запуске openvpn необходимо
      # указывать параметр --writepid /var/run/openvpn.pid
      run_watch openvpn {
          pidfile = "/var/run/openvpn.pid"
          format = " openvpn"
          # если пареметр format_down оставить пустым,
          # то при неактивном процессе блок будет отсутствовать
          format_down=""
      }
      
      # аналогичный блок индикатор openconnect vpn клиента
      # требуется запуск клиента с параметром --pid-file=/var/run/openconnect.pid
      run_watch openconnect {
          pidfile = "/var/run/openconnect.pid"
          format = " openconnect vpn"
          format_down=""
      }
      
      # управление громкостью звука
      volume master {
          format = " %volume" # шаблон громкости в активном состоянии
          format_muted = " %volume" # шаблон громкости в состоянии muted (без звука)
          device = "default"
          mixer = "Master"
          mixer_idx = 0
      }
      
      # индикатор WIFI
      wireless _first_ {
          # шаблон вывода, можно дополнить
          # наименованием подключения %essid
          # и ip адресом %ip
          format_up = "%quality %frequency"
          format_down = ""
      }
      
      # состояние заряда батареи
      battery all {
          # шаблон вывода, можно дополнить
          # оставшимся временем работы %emptytime
          # энергопотреблением %consumption в ваттах
          format = "%status %percentage"
      
          # true - показ процента заряда от 0 до 100
          # false - показ процента заряда от 0 до n, с учетом
          # изношенности аккумулятора
          last_full_capacity = true
          format_down = ""
          status_chr = "" # статус подзарядки
          status_bat = "" # статус в режиме работы от батареи
          status_unk = "? UNK" # неизвестный статус
          status_full = "" # статус полного заряда
          path = "/sys/class/power_supply/BAT%d/uevent"
      
          # нижний порог заряда, после которого блок
          # будет окрашен в "color_bad" (по умолчанию красный)
          # подробнее в man i3status
          low_threshold = 10
      }
      
      # отслеживаемый накопитель
      disk "/" {
          # доступные переменные:
          # %used, %percentage_used - занятое пространство
          # %free, %percentage_free - свободное пространство
          # %avail, %percentage_avail - доступное пространство
          # %total - всего
          format = " %avail"
      
          # будет окрашен в "color_bad" (по умолчанию красный)
          # при достижении нижнего порога менее 10GB доступного пространства
          low_threshold = "10"
          threshold_type = "gbytes_avail"
          format_below_threshold = " Warning: %avail"
      }
      
      # миниторинг оперативной памяти
      memory {
          # доступные переменные:
          # %total, percentage_total
          # %used, percentage_used
          # %free, percentage_free
          # %available, percentage_available
          # %shared, percentage_shared
          format = " %used"
      
          # порог, при котором вывод окрасится в
          # желтый (degraded) или красный (critical)
          # а формат вывода изменится на format_degraded
          threshold_degraded = "1G"
          threshold_critical = "200M"
          format_degraded = "MEMORY < %available"
      }
      
      # температура процессора
      cpu_temperature 0 {
          format = " %degrees"
      
          # верхний порог температуры, при достижении которого
          # вывод окрасится красным,
          # и формат изменится на format_above_threshold
          max_threshold = "80"
          format_above_threshold = " %degrees"
          path = "/sys/class/thermal/thermal_zone0/temp"
      }
      
      # использование центрального процессора
      cpu_usage {
          # %usage - процентное использование ЦП
          # %cpu<N> - начиная с %cpu0 и далее показывает использование ядер
          format = " %usage"
      
          # доступны параметры:
          # degraded_threshold, окрас в желтый, по умолчанию 90
          # max_threshold, окрас в красный, по умолчанию 95
          # и кастомные форматы для них
          # format_above_degraded_threshold и format_above_threshold
      }
      
      # вывод даты и времени по заданному формату
      tztime local {
          format = " %d %b %Y  %H:%M:%S"
      }
      

5.3.2 py3status

  • py3status — это расширяемая оболочка для i3status, написанная на python.
  • Сайт: https://py3status.readthedocs.io/.
  • Репозиторий: https://github.com/ultrabug/py3status.
  • Можно управлять i3bar:
    • используя один из доступных модулей, поставляемых с py3status;
    • группировать несколько модулей и автоматически или вручную циклически отображать их отображение;
    • писать свои собственные модули и отображать их вывод на панели;
    • обрабатывать события кликов на i3bar.
  • Отображается вверху или внизу экрана.
  • Содержит:
    • область с кнопками переключения рабочих областей i3;
    • системную строку;
    • системный трей с иконками программ.
  1. Запуск py3status

    • Запускается вместо i3bar:
      # ~/.config/i3/config -*- mode: conf-unix; -*-
      ## Start py3status to display a workspace bar
      bar {
          font pango:Iosevka Nerd Font 12
          status_command py3status
          position top
      }
      
    • Использует конфигурационный файл от i3status или собственную конфигурацию.
    • Порядок поиска конфигурационного файла:
      • $XDG_CONFIG_HOME/py3status/config;
      • $XDG_CONFIG_HOME/i3status/config;
      • $XDG_CONFIG_HOME/i3/i3status.conf;
      • ~/.i3status.conf;
      • ~/.i3/i3status.conf;
      • $XDG_CONFIG_DIRS/i3status/config;
      • /etc/i3status.conf.

5.3.3 polybar

  • Отдельное приложение для строки статуса.

  • Применяется для замены i3bar.

  • https://polybar.github.io/

  • https://github.com/polybar/polybar

  • Темы для polybar: https://github.com/adi1090x/polybar-themes

  • Одним из побудительных мотивов установки polybar может быть то, что здесь можно без проблем настроить индикатор раскладки клавиатуры.

  • Установка

    • Gentoo:
      USE="i3wm" emerge x11-misc/polybar
      
  • Конфигурационный файл:

    • стандартное расположение: ~/.config/polybar/config ($XDG_CONFIG_HOME/polybar/config);
    • использую для локальных настроек только для i3: ~/.config/i3/polybar/config.
  1. Скрипт запуска

    • Создадим скрипт запуска polybar.
      #!/bin/bash
      # ~/.config/i3/polybar/launch.sh
      
      # Terminate already running bar instances
      killall -q polybar
      # If all your bars have ipc enabled, you can also use
      # polybar-msg cmd quit
      
      # Wait until the processes have been shut down
      while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done
      
      # Launch Polybar, using config location ~/.config/i3/polybar/config
      polybar --config=~/.config/i3/polybar/config i3 &
      
      echo "Polybar launched..."
      
    • Установим права на исполнение:
      chmod +x ~/.config/i3/polybar/launch.sh
      
    • Добавим вызов polybar в файл конфигурации i3. Конфигурацию для i3bar следует закомментировать.
      ## ~/.config/i3/config
      
      ## Start i3bar to display a workspace bar
      # bar {
      #     font pango:Source Sans Pro, FontAwesome 5 Free 10
      #     status_command	i3status --config ~/.config/i3/i3status/config
      #     position		top
      # }
      
      ## Start polybar
      exec_always --no-startup-id ~/.config/i3/polybar/launch.sh
      

5.4 Запуск приложений

5.4.1 rofi

  • Используется для запуска приложений, переключения окон.
  • https://github.com/davatorium/rofi
  • Конфигурация по умолчанию находится в ~/.config/rofi/config.
  • Для выбора темы можно использовать команду:
    rofi-theme-selector
    
  • Для запуска программ используется несколько мод:
    • run: запускать приложения из пути ($PATH) с возможностью запуска в терминале.
    • drun: запускать приложения на основе desctop-файлов (по стандарту XDG).
    • window: переключение между окнами в оконном менеджере, совместимом со спецификацией EWMH.
    • ssh: подключение к удаленному хосту через ssh.
    • file-browser: базовый файловый броузер для открытия файлов.
    • keys: список внутренних привязок клавиш.
    • script: использование простых скриптов.
    • combi: объединяет несколько мод в одну.
  • Использование запятых в файле настроек i3 может привести к проблемам. Лучше использовать файл настроек rofi или замените запятые символом #, например, заменить строку
    rofi -combi-modi window,drun,ssh
    
    на
    rofi -combi-modi window#drun#ssh
    
  • Возможная конфигурация в командной строке команды rofi:
    ## ~/.config/i3/config
    set $menu rofi -combi-modi window#drun -show combi -modi combi -show-icons
    
  • Конфигурация с помощью конфигурационного файла (поместим его в ~/.config/i3/rofi/config).

5.5 Блокировка экрана

  • Для отключения экрана можно использовать DPMS:

    exec --no-startup-id xset dpms 1800
    
    • Отключается через 30 минут.

5.5.1 Блокировщик экрана i3lock

  • В качестве блокировщика экрана используем i3lock.

    • Установка
      • Gentoo
        emerge x11-misc/i3lock
        
  • Использование в конфигурационном файле:

    set $Locker i3lock --color=000000 && sleep 1
    
    • sleep 1 добавляет небольшую задержку, чтобы предотвратить возможное состояние гонки.
  • Для блокировки экрана после заданного периода времени можно использовать xautolock или xss-lock.

  • Использование xautolock.

  • Установка

    • Gentoo
      emerge x11-misc/xautolock
      
  • Использование в конфигурационном файле:

    exec --no-startup-id xautolock -time 10 -locker "$Locker"
    
    • Блокирует через 10 минут.
  • Использование xss-lock.

  • Установка

    • Gentoo
      emerge x11-misc/xss-lock
      
  • Использование в конфигурационном файле:

    exec --no-startup-id xss-lock -- "$Locker"
    

5.5.2 Блокировщик экрана i3lock-color

  1. Дополнительные возможности в i3lock-color

    • Дополнительное управление цветом элементов.
    • Размытие текущего экрана и использование его в качестве фона блокировки.
    • Отображение часов в индикаторе.
    • Обновление по таймеру, а не при каждом нажатии клавиши.
    • Отображение раскладки клавиатуры.
  1. Установка

    • Gentoo
      • Порт находится в оверлее guru:
        emerge x11-misc/i3lock-color
        

6 Приложения

6.1 Снимки экрана

  • Для скриншотов можно использовать scrot.

    • Gentoo
      emerge media-gfx/scrot
      
  • Добавим в конфигурационный файл:

    ## Screenshot
    
    ## Screenshot active display
    bindsym --release Print exec --no-startup-id scrot '%Y-%m-%d_%H-%M-%S_$wx$h.png' -e 'mv $f `xdg-user-dir PICTURES` 2>/dev/null'
    
    ## Screenshot current window
    bindsym --release $mod+Print exec --no-startup-id scrot -u '%Y-%m-%d_%H-%M-%S_$wx$h.png' -e 'mv $f `xdg-user-dir PICTURES` 2>/dev/null'
    
    ## Screenshot selected region
    bindsym --release $mod+Shift+Print exec --no-startup-id scrot -s '%Y-%m-%d_%H-%M-%S_$wx$h.png' -e 'mv $f `xdg-user-dir PICTURES` 2>/dev/null'
    
    • По клавише PrtScr делается скриншот.
    • По клавише mod + PrtScr делается скриншот активного окна.
    • По клавише mod + Shift + PrtScr предлагается выделить область экрана, скриншот которой следует сделать.
    • Скриншоты переносятся в каталог $XDG_PICTURES_DIR (обычно ~/Pictures или ~/Изображения) (см. XDG. Пользовательские каталоги).

7 Совместимость приложений

7.1 Java

7.1.1 Серое окно, приложения не меняют размер с помощью WM, меню сразу закрываются

  • В стандартных тулкитах для Java жестко зашит список оконных менеджеров.
  • Следует установить переменную окружения:
    export _JAVA_AWT_WM_NONREPARENTING=1
    

7.1.2 Меню в приложениях плавает отдельно, им невозможно пользоваться

  • В выпусках Java до версии 9 GTK интерфейс ориентирован на GTK2, в последующих версиях на GTK3.
  • GTK LookAndFeel может работать с GTK версий 2, 2.2 и 3.
  • По умолчанию используется GTK3.
  • Следует явно задать более старую версию:
    export JAVA_TOOL_OPTIONS='-Djdk.gtk.version=2.2'
    

Дмитрий Сергеевич Кулябов
Дмитрий Сергеевич Кулябов
Профессор кафедры теории вероятностей и кибербезопасности

Мои научные интересы включают физику, администрирование Unix и сетей.

Похожие