EXWM - Arch Linux 中文维基

跳至內容

# EXWM

出自 Arch Linux 中文维基

相關文章

- 窗口管理器

翻譯狀態：

- 本文（或部分內容）譯自 EXWM，最近一次同步於 2025-02-14，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

EXWM 是一款基於 Emacs 的窗口管理器。

## 安裝

確保已安裝 emacs包。還需要 xorg-xinit包。

在 Emacs 中安裝 EXWM： `M-x package-install RET exwm RET`。

編輯 xinitrc 並添加：

    exec emacs

在 emacs 初始化（init）文件中添加

    (require 'exwm)
    (require 'exwm-config)
    (exwm-config-example)

以使用默認設置。如果想使用自己的設置，請使用 `(exwm-enable)` 而不是 `(exwm-config-example)` （也無需 `(require 'exwm-config)`）。

還可以在伺服器模式下啟動 emacs，並通過命令行啟動 EXWM。請參見 https://github.com/ch11ng/exwm/issues/284 。

## 配置

EXWM 是一個完整的 X 窗口管理器，因此 Emacs 可以管理瀏覽器、vlc 等 X 窗口。您可以使用所有正常的 Emacs 窗口命令來控制窗口的位置。在 X 窗口（即非「正常」的 Emacs 緩衝區）中，有些命令會被 EXWM 捕捉，而不會傳遞給程序。這些鍵值存儲在 `exwm-input-prefix-keys` 中。此外，您也可以通過自定義 `exwm-input-global-keys` 來設置全局命令。如果您不使用自定義功能，而希望在 elisp 中設置 `exwm-input-global-keys` ，請注意可能需要重啟 EXWM（並在啟用 exwm 之前設置 `exwm-input-global-keys`）。或者，你也可以嘗試使用 "or emacs" blog 中的 `cset` 宏，它可以在不重啟 EXWM 的情況下重新定義 `exwm-input-global-keys`。要使用 s-& 作為啟動程序（如 firefox）的快捷鍵，可以這樣做：

    (setq exwm-input-global-keys `(,(kbd "s-&") .
                                   (lambda (command)
                                     (interactive (list (read-shell-command "$ ")))
                                     (start-process-shell-command command nil command))))

### 多顯示器

EXWM 可以通過（可選）`exwm-randr` 軟體包處理多顯示器問題。在調用 `(exwm-enable)` 之前，您需要安裝 xrandr 並在 emacs 配置文件中啟用 exwm-randr。您需要調整 「DP-1」 和 「DP-2」 的值，使其與您電腦使用的值一致；在命令行中調用 `xrandr` 不帶參數，即可查看可用輸出。

    (require 'exwm-randr)
    (setq exwm-randr-workspace-output-plist '(1 "DP-1"))
    (add-hook 'exwm-randr-screen-change-hook
              (lambda ()
                (start-process-shell-command
                 "xrandr" nil "xrandr --output DP-1 --right-of DP-2 --auto")))
    (exwm-randr-enable)

### 系統托盤

EXWM 支持系統托盤，但默認情況下並未啟用。要啟用它，請在 dotemacs 文件中的 `(exwm-enable)` 前添加以下內容：

    (require 'exwm-systemtray)
    (exwm-systemtray-mode 1)

之後可能需要調整高度；可以使用 `exwm-systemtray-height` 變量進行調整。

## 嵌入 LXDE

EXWM 可以代替 openbox，讓您仍然可以使用 LXDE 會話管理工具。

在這樣做之前，請確保已為 emacs 設置好運行 EXWM 的啟動文件（見上文）

lxsession 使用`~/.config/lxsession/LXDE/desktop.conf`中定義的窗口管理器。(默認情況下使用Openbox）。如果該文件不存在，則會在 `/etc/xdg/lxsession/LXDE/desktop.conf` 中搜索。

用 emacs 替換任一文件中的 `openbox-lxde`：

    [Session]
    window_manager=emacs

### lxsession-logout

您可以在 emacs 中創建以下函數，以便在 LXDE 會話中乾淨利落地註銷、關機或重啟：

    (defun exwm-logout ()
      (interactive)
      (recentf-save-list)
      (save-some-buffers)
      (start-process-shell-command "logout" nil "lxsession-logout"))

該功能會將最近的歷史記錄存儲到磁碟中，提示您保存、丟棄或更改未保存緩衝區中的更改，然後啟動註銷管理器。你可以將此功能綁定到 emacs 中的任意鍵上。

## 疑難解答

### 火狐瀏覽器屏幕撕裂

在某些程序中，特別是 Firefox 中，您可能會遇到屏幕撕裂現象。您可以試試

- 在首選項 > 高級 > 使用平滑滾動中關閉平滑滾動。
- 安裝（並激活）Compton 或其他合成管理器：Xorg#合成。

### 令人困惑的緩衝區名稱

您可能會看到緩衝區名稱被命名為 「*EXWM*」。EXWM 允許緩衝區自行命名。要允許緩衝區自行命名，請在 dotemacs 中添加以下內容：

    ;; Make buffer name more meaningful
    (add-hook 'exwm-update-class-hook
              (lambda ()
              (exwm-workspace-rename-buffer exwm-class-name)))

## 參見

- EXWM 維基

分類：​

- 平鋪式窗口管理器
- Emacs

EXWM
新增話題