「Xmonad」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
 
(5人の利用者による、間の32版が非表示)
1行目: 1行目:
  +
{{Lowercase title}}
 
[[Category:タイル型ウィンドウマネージャ]]
 
[[Category:タイル型ウィンドウマネージャ]]
  +
[[de:Xmonad]]
 
[[en:Xmonad]]
 
[[en:Xmonad]]
 
[[fr:Xmonad]]
 
[[fr:Xmonad]]
  +
[[ru:Xmonad]]
[[tr:Xmonad_Pencere_Yöneticisi]]
 
[[zh-CN:Xmonad]]
+
[[zh-hans:Xmonad]]
 
{{Related articles start}}
 
{{Related articles start}}
  +
{{Related|xmobar}}
 
{{Related|dzen}}
 
{{Related|dzen}}
 
{{Related|dmenu}}
 
{{Related|dmenu}}
10行目: 13行目:
 
{{Related|ウィンドウマネージャ}}
 
{{Related|ウィンドウマネージャ}}
 
{{Related articles end}}
 
{{Related articles end}}
[http://xmonad.org/ xmonad] は、Xのタイル型ウィンドウマネージャです。画面を分割し、重なり合わないようにウィンドウを配置することで、画面を最大限に活用することができます。ウィンドウマネージャの機能はキーボードから利用することができます (マウスはオプションです)。
 
   
  +
[http://xmonad.org/ xmonad] は、[[X]] のタイル型[[ウィンドウマネージャ]]です。画面を分割し、重なり合わないようにウィンドウを配置することで、画面を最大限に活用することができます。ウィンドウマネージャの機能はキーボードから利用することができます (マウスはオプションです)。
xmonadは [http://haskell.org/ Haskell] で実装されており、設定や拡張も Haskell で書かれています。レイアウトやキーバインド、その他の設定はユーザーが設定ファイルに書き込むことで変更できます。
 
   
  +
xmonad は [[Haskell]] で実装されており、設定や拡張も Haskell で書かれています。レイアウトやキーバインド、その他の設定はユーザーが設定ファイルに書き込むことで変更できます。
レイアウトは動的に適用され、各ワークスペース上で異なるレイアウトを使用することができます。Xinerama が完全にサポートされ、ウィンドウを複数のモニタで並べて表示することができます。
 
  +
  +
レイアウトは動的に適用され、各ワークスペース上で異なるレイアウトを使用することができます。[[Wikipedia:ja:Xinerama|Xinerama]] が完全にサポートされ、ウィンドウを複数のモニタで並べて表示することができます。
   
 
詳細は、xmonad のウェブサイトをご覧ください: http://xmonad.org/
 
詳細は、xmonad のウェブサイトをご覧ください: http://xmonad.org/
20行目: 24行目:
 
==インストール==
 
==インストール==
   
  +
{{Pkg|xmonad}}を[[インストール]]してください。これには基本的な設定が含まれています。追加のタイリングアルゴリズムや設定、スクリプトなど便利なデスクトップ設定を含んでいる {{Pkg|xmonad-contrib}} もインストールすることを推奨します。
{{Pkg|xmonad}} と {{Pkg|xmonad-contrib}} は[[公式リポジトリ]]から利用可能です。最新の開発スナップショットのビルド (darcs) は [[Arch User Repository|AUR]] にあります。下のセクションは、開発スナップショット {{AUR|xmonad-darcs}} の使い方です。
 
   
  +
また、開発版の {{AUR|xmonad-git}} や {{AUR|xmonad-contrib-git}} をインストールすることもできます。
{{Note|[[ArchHaskell]] リポジトリを使うことを選んだ場合は、{{Pkg|xmonad}} の代わりに ''haskell-xmonad'' パッケージをインストールする必要があります (公式の community リポジトリにあるパッケージは依存パッケージが異なっています)。}}
 
   
  +
{{Note|
=== 開発版 (xmonad-darcs) ===
 
  +
xmonad をアップグレードしたら {{ic|xmonad --recompile}} を忘れずに実行してください。次回起動時に共有ライブラリが見つからずに問題が発生する可能性があります。これを自動的に実行したい場合は[[#アップデート後に共有ライブラリが見つからない]]を見て設定してください。}}
   
  +
==xmonad の起動==
xmonad-darcs 開発版は [[Arch User Repository|AUR]] からインストールでき、[[公式リポジトリ]]に多少の依存パッケージがあります。以下の順番で[[インストール]]してください:
 
  +
xmonad を自動起動するには、起動スクリプトに {{Ic|xmonad}} コマンドを追加します (例えば、startx を使う場合 {{ic|~/.xinitrc}}、[[XDM]] ログインマネージャを使う場合 {{ic|~/.xsession}})。[[GDM]] や [[KDM]] を使う場合は、新しいセッションファイルを作成し、セッションメニューから xmonad を選択します。
   
  +
[[Xterm]] パッケージをインストールするか、設定でターミナルエミュレータを変更しないと Xmonad の中で何もできなくなるので注意してください。
* {{AUR|xmonad-darcs}} -- コアのウィンドウマネージャ
 
* {{AUR|xmonad-contrib-darcs}} -- カスタムレイアウトや設定などの機能を提供する拡張
 
   
  +
{{Note|xmonad はデフォルトでは X のマウスカーソルを変更しません。すなわち、マウスカーソルはクロスマーク x です。左矢印 left_ptr に設定するには起動スクリプト (例: {{ic|~/.xinitrc}}) に以下を追加します: {{ic|xsetroot -cursor_name left_ptr}}。こちらも参照してみて下さい [[カーソルテーマ#形が X のデフォルトカーソルの変更]]。}}
==設定==
 
 
===Xmonad の起動===
 
Xmonad を自動起動するには、起動スクリプトに {{Ic|xmonad}} コマンドを追加します (例えば、startx を使う場合 {{ic|~/.xinitrc}}、[[XDM|XDM]] ログインマネージャを使う場合 {{ic|~/.xsession}})。[[GDM|GDM]] や [[KDM|KDM]] を使う場合は、新しいセッションファイルを作成し、セッションメニューから xmonad を選択します。
 
 
{{Note|デフォルトではマウスカーソルは x です。left_ptr に設定するには起動スクリプトに以下を追加します (例: {{ic|~/.xinitrc}}):<br>
 
{{bc|xsetroot -cursor_name left_ptr}}}}
 
   
 
また、標準では US キーボードレイアウトなので、必要に応じて変更します。例えば日本語キーボードレイアウトは {{ic|~/.xinitrc}} に以下を追加します。キーボードレイアウトの設定については[[Xorg#キーボードの設定|ここ]]を参照してください。:
 
また、標準では US キーボードレイアウトなので、必要に応じて変更します。例えば日本語キーボードレイアウトは {{ic|~/.xinitrc}} に以下を追加します。キーボードレイアウトの設定については[[Xorg#キーボードの設定|ここ]]を参照してください。:
53行目: 52行目:
 
$ mkdir ~/.xmonad
 
$ mkdir ~/.xmonad
   
詳細については、[[xinitrc|xinitrc]] を参照してください。
+
詳細については、[[xinitrc]] を参照してください。
   
===Xmonad の設定===
+
==設定==
   
Xmonad ユーザーは {{ic|~/.xmonad/xmonad.hs}} を修正することで Xmonad をカスタマイズすることができます。再コンパイルは {{ic|Mod+q}} ショートカットでその場で自動的にされます。
+
xmonad ユーザーは {{ic|~/.xmonad/xmonad.hs}} を修正することで xmonad をカスタマイズすることができます。再コンパイルは {{ic|Mod+q}} ショートカットでその場で自動的にされます。
   
 
ディレクトリ {{ic|~/.xmonad}} がない場合は {{ic|xmonad --recompile}} を実行してディレクトリを作成します。
 
ディレクトリ {{ic|~/.xmonad}} がない場合は {{ic|xmonad --recompile}} を実行してディレクトリを作成します。
   
Xmonad のデフォルトの設定は非常に優秀で、{{ic|xmonad.hs}} がなくても実行することができます。そのため、{{Ic|xmonad --recompile}} を実行したあとでも {{ic|~/.xmonad/xmonad.hs}} は多分無いでしょう。あなたがそれをカスタマイズしたいのならば、ファイルを作成しそれを編集していきましょう。
+
xmonad のデフォルトの設定は非常に優秀で、{{ic|xmonad.hs}} がなくても実行することができます。そのため、{{Ic|xmonad --recompile}} を実行したあとでも {{ic|~/.xmonad/xmonad.hs}} は多分無いでしょう。あなたがそれをカスタマイズしたいのならば、ファイルを作成しそれを編集していきましょう。
   
Xmonad の設定ファイルは Haskell で書かれているため、プログラマーでないとなかなか設定が難しいと思われます。設定例や詳細方法は以下のページを参照して下さい:
+
xmonad の設定ファイルは Haskell で書かれているため、プログラマーでないとなかなか設定が難しいと思われます。設定例や詳細方法は以下のページを参照して下さい:
   
 
* [http://haskell.org/haskellwiki/Xmonad xmonad wiki]
 
* [http://haskell.org/haskellwiki/Xmonad xmonad wiki]
70行目: 69行目:
 
* Arch Linux [https://bbs.archlinux.org/viewtopic.php?id=40636 フォーラムスレッド]
 
* Arch Linux [https://bbs.archlinux.org/viewtopic.php?id=40636 フォーラムスレッド]
   
最善の方法は組み込みの関数 defaultConfig を使用し、必要なところを {{ic|~/.xmonad/xmonad.hs}} で変更やカスタマイズをすることです。
+
最善の方法は組み込みの def 関数を使用し、必要なところを {{ic|~/.xmonad/xmonad.hs}} で変更やカスタマイズをすることです。
   
 
次のように {{ic|xmonad.hs}} を書くことによって設定します:
 
次のように {{ic|xmonad.hs}} を書くことによって設定します:
   
import XMonad
+
import XMonad
  +
  +
main = xmonad def
  +
{ terminal = "urxvt"
  +
, modMask = mod4Mask
  +
, borderWidth = 3
  +
}
   
  +
この例では、デフォルトの設定に端末とボーダーの設定を上書きします (その他の設定は def 関数から継承されます)。
main = do
 
xmonad $ defaultConfig
 
{ terminal = "urxvt"
 
, modMask = mod4Mask
 
, borderWidth = 3
 
}
 
 
デフォルトの設定に端末とボーダーの設定を上書きします (その他の設定は defaultConfig 関数から継承されます)。
 
   
 
より複雑になるにつれ、それぞれ別の関数で設定しメイン関数内でそれらの関数を呼び出したほうが便利です。これによって、大規模なカスタマイズをするときに保守が簡易になります。
 
より複雑になるにつれ、それぞれ別の関数で設定しメイン関数内でそれらの関数を呼び出したほうが便利です。これによって、大規模なカスタマイズをするときに保守が簡易になります。
89行目: 87行目:
 
上記の簡単な {{ic|xmonad.hs}} は次のように書くことができます:
 
上記の簡単な {{ic|xmonad.hs}} は次のように書くことができます:
   
import XMonad
+
import XMonad
  +
  +
main = do
  +
xmonad $ def
  +
{ terminal = myTerminal
  +
, modMask = myModMask
  +
, borderWidth = myBorderWidth
  +
}
  +
  +
myTerminal = "urxvt"
  +
myModMask = mod4Mask -- Win key or Super_L
  +
myBorderWidth = 3
   
  +
また、Haskell では import が最初にあれば、トップレベルの要素 (main, myTerminal, myModMask 等) や {} 内の順序は重要ではありません。
main = do
 
xmonad $ defaultConfig
 
{ terminal = myTerminal
 
, modMask = myModMask
 
, borderWidth = myBorderWidth
 
}
 
   
  +
以下は [http://haskell.org/haskellwiki/Xmonad/Config_archive/Template_xmonad.hs_(0.9) この] 設定ファイルの一部です。これは一般的な機能の一例です。
myTerminal = "urxvt"
 
myModMask = mod4Mask -- Win key or Super_L
 
myBorderWidth = 3
 
   
  +
{
また、Haskell では import が最初にあれば、関数や {} 内の順序は重要ではありません。
 
  +
terminal = myTerminal,
  +
focusFollowsMouse = myFocusFollowsMouse,
  +
borderWidth = myBorderWidth,
  +
modMask = myModMask,
  +
-- numlockMask deprecated in 0.9.1
  +
-- numlockMask = myNumlockMask,
  +
workspaces = myWorkspaces,
  +
normalBorderColor = myNormalBorderColor,
  +
focusedBorderColor = myFocusedBorderColor,
  +
-- key bindings
  +
keys = myKeys,
  +
mouseBindings = myMouseBindings,
  +
-- hooks, layouts
  +
layoutHook = myLayout,
  +
manageHook = myManageHook,
  +
handleEventHook = myEventHook,
  +
logHook = myLogHook,
  +
startupHook = myStartupHook
  +
}
   
  +
パッケージにも {{ic|xmonad.hs}} が入っており、これは {{ic|xmonad.hs}} の最新の公式サンプルです。どうやって設定を上書きするのかその例となる xmonad Haskell モジュールとなっています。ただし、これは自分自身の設定へピックアップしていくための例を集めたものとなっていて、直接これをテンプレートとして使用することは避けてください。{{ic|/usr/share/}} の中にアーキテクチャとバージョン別に置かれています (例: {{ic|find /usr/share -name xmonad.hs}})。
以下は [http://haskell.org/haskellwiki/Xmonad/Config_archive/Template_xmonad.hs_(0.9) この] 設定ファイルの一部です。これは一般的な機能の一例です。
 
   
  +
=== デスクトップ設定のベース ===
{
 
  +
{{Pkg|xmonad-contrib}} にはデスクトップとして使うためのデフォルト設定があります。Chromium など新しいプログラムで発生する問題を解決します。
terminal = myTerminal,
 
focusFollowsMouse = myFocusFollowsMouse,
 
borderWidth = myBorderWidth,
 
modMask = myModMask,
 
-- numlockMask deprecated in 0.9.1
 
-- numlockMask = myNumlockMask,
 
workspaces = myWorkspaces,
 
normalBorderColor = myNormalBorderColor,
 
focusedBorderColor = myFocusedBorderColor,
 
-- key bindings
 
keys = myKeys,
 
mouseBindings = myMouseBindings,
 
-- hooks, layouts
 
layoutHook = myLayout,
 
manageHook = myManageHook,
 
handleEventHook = myEventHook,
 
logHook = myLogHook,
 
startupHook = myStartupHook
 
}
 
   
  +
以下のように追加してください:
パッケージにも {{ic|xmonad.hs}} が入っており、これは {{ic|xmonad.hs}} の最新の公式サンプルです。{{ic|/usr/share/}} の中にアーキテクチャとバージョン別に置かれています (例: {{ic|find /usr/share -name xmonad.hs}})。
 
  +
  +
import XMonad
  +
import XMonad.Config.Desktop
  +
  +
main = xmonad desktopConfig
  +
{ terminal = "urxvt"
  +
, modMask = mod4Mask
  +
}
   
===Xmonad の終了===
+
==Xmonad の終了==
 
{{ic|Mod+Shift+q}} で xmonad を終了させることができます。{{ic|Mod}} はデフォルトでは {{ic|Alt}} になっています。
 
{{ic|Mod+Shift+q}} で xmonad を終了させることができます。{{ic|Mod}} はデフォルトでは {{ic|Alt}} になっています。
   
  +
== ヒントとテクニック ==
== Tips and tricks ==
 
   
 
=== X-Selection-Paste ===
 
=== X-Selection-Paste ===
   
  +
Xmonad でのキーボードによる操作は [[キーボードショートカット#X-selection-paste のキーバインディング|X-Selection-Paste]] のキーボードショートカットを使うことで更に良くなります。
The keyboard-centered operation in Xmonad can be further supported with a keyboard shortcut for [[Keyboard shortcuts#Key_Binding_for_X-Selection-Paste|X-Selection-Paste]].
 
   
  +
また、XMonad.Util.Paste に存在する "pasteSelection" 関数を以下のようにキーにバインドすることもできます:
Also, there exists a function "pasteSelection" in XMonad.Util.Paste that can be bound to a key using a line like:
 
 
{{hc|xmonad.hs|
 
{{hc|xmonad.hs|
  +
import XMonad.Util.Paste -- Remember to include this line
 
-- X-selection-paste buffer
 
-- X-selection-paste buffer
 
, ((0, xK_Insert), pasteSelection)}}
 
, ((0, xK_Insert), pasteSelection)}}
  +
"Insert" キーを押すとアクティブウィンドウにマウスバッファが貼り付けられるようになります。
Pressing the "Insert" key will now paste the mouse buffer in the active window.
 
   
  +
{{Warning|1=<nowiki/>
=== Complementary applications ===
 
  +
* "pasteSelection" は XMonad.Util.XSelection にある "getSelection" を使用しており、"getSelectin" の欠陥を受け継いでいます。
  +
* "getSelection" は 「根本的に間違った実装になっていて、デッドロックやクラッシュなどの故障になり得ます」。詳細は [https://code.google.com/p/xmonad/issues/detail?id=573] を見て下さい。
  +
* 実際問題としては、これらのエラーは存在するものの、起きることは非常に稀です。
  +
}}
  +
{{Tip|1=<nowiki/>より詳しい事は [https://hackage.haskell.org/package/xmonad-contrib-0.16/docs/XMonad-Util-XSelection.html] にあります。}}
   
  +
=== キーボードショートカット ===
There are number of complementary utilities that work well with xmonad. The most common of these include:
 
   
  +
デフォルトのキーボードショートカットは、 xmonad の man page {{man|1|xmonad|NOTES}} に列挙されています。
* {{App|[[xmobar]]|A lightweight, text-based, status bar written in Haskell.|http://projects.haskell.org/xmobar/|{{Pkg|xmobar}}, {{AUR|xmobar-git}}}}
 
* {{App|xmonad-log-applet|https://github.com/alexkay/xmonad-log-applet|An applet for the GNOME, MATE or xfce panel.|{{AUR|xmonad-log-applet-xfce4-git}}, {{AUR|xmonad-log-applet-gnome-git}}}}
 
   
  +
=== バインドされていないキーをターゲットにする ===
=== Increase the number of workspaces ===
 
  +
  +
もし xmonad をスタンドアローンなウィンドウマーネージャとして使うのであれば、 {{ic|xmonad.hs}} にバインドされていないキーボードのキーを追加できます。することは、まずキーの Xf86 キーネーム (XF86PowerDown のようなやつ) を、{{ic|/usr/include/X11/XF86keysym.h}} で探します。するとキーコード (たとえば 0x1008FF2A) が分かるので、{{ic|xmonad.hs}} のキーバインディング部分に次の様に追加します:
  +
  +
((0, 0x1008FF2A), spawn "sudo pm-suspend")
  +
  +
=== マウスで画面の端をタッチして X () アクションを実行する ===
  +
  +
[https://hackage.haskell.org/package/xmonad-contrib-0.16/docs/XMonad-Hooks-ScreenCorners.html XMonad.Hooks.ScreenCorners] を使用すると、ユーザーは XMonad を使用して KDE のような画面コーナーを設けることができます。
  +
  +
==== ScreenCorners でワークスペースを切り替える (KDE のような) ====
  +
  +
startHook で一連の操作を定義します:
   
By default, xmonad uses 9 workspaces. You can increase this to 14 by extending the following line like this:
 
 
{{hc|xmonad.hs|
 
{{hc|xmonad.hs|
  +
<nowiki>
-- (i, k) <- zip (XMonad.workspaces conf) [xK_1, xK_2, xK_3, xK_4, xK_5, xK_6, xK_7, xK_8, xK_9]
 
  +
...
(i, k) <- zip (XMonad.workspaces conf) [xK_grave, xK_1, xK_2, xK_3, xK_4, xK_5, xK_6, xK_7, xK_8, xK_9, xK_0, xK_minus, xK_equal, xK_BackSpace]}}
 
  +
import XMonad.Hooks.ScreenCorners
  +
...
   
  +
mystartupHook = do
=== Making room for Conky or tray apps ===
 
  +
...
  +
... example ...
  +
addScreenCorners [ (SCLowerLeft, prevWS)
  +
, (SCLowerRight, nextWS)
  +
, (SCUpperLeft, spawnSelected' myAppGrid)
  +
, (SCUpperRight, goToSelected $ mygridConfig' myColorizer)
  +
]
  +
...
  +
</nowiki>
  +
}}
   
  +
次に、screenCornerEventHook を handleEventHook に追加します:
Wrap your layouts with avoidStruts from XMonad.Hooks.ManageDocks for automatic dock/panel/trayer spacing:
 
   
  +
myConfig = def {
import XMonad
 
  +
...
import XMonad.Hooks.ManageDocks
 
  +
handleEventHook = ... <+> screenCornerEventHook <+> ...
  +
...
  +
}
  +
  +
最後に screenCornerLayoutHook を追加します:
  +
  +
...
  +
myLayoutHook = screenCornerLayoutHook $ ......
  +
...
  +
myConfig = def {
  +
...
  +
layoutHook = myLayoutHook
  +
...
  +
}
  +
  +
{{Note|1=<nowiki/>
  +
* この拡張機能は、KDE ​​のような画面コーナーを XMonad に追加します。
  +
* * カーソルを画面隅の1つに移動すると、XMonad.Actions.GridSelect.goToSelected や XMonad.Actions.CycleWS.nextWS などの X () アクションをトリガーできます。}}
  +
  +
=== ワークスペースの数を増やす ===
  +
  +
デフォルトでは、xmonad は9つのワークスペースを使います。以下のように拡張することでワークスペースの数を増やすことが可能です:
  +
{{hc|xmonad.hs|<nowiki>import XMonad
  +
import XMonad.Util.EZConfig (additionalKeys)
  +
  +
main=do
  +
xmonad $ def
  +
{ ...
  +
, workspaces = myWorkspaces
  +
, ...
  +
} `additionalKeys` myAdditionalKeys
  +
  +
myWorkspaces = ["1","2","3","4","5","6","7","8","9"] ++ (map snd myExtraWorkspaces) -- you can customize the names of the default workspaces by changing the list
  +
  +
myExtraWorkspaces = [(xK_0, "0")] -- list of (key, name)
  +
  +
myAdditionalKeys =
  +
[ -- ... your other hotkeys ...
  +
] ++ [
  +
((myModMask, key), (windows $ W.greedyView ws))
  +
| (key, ws) <- myExtraWorkspaces
  +
] ++ [
  +
((myModMask .|. shiftMask, key), (windows $ W.shift ws))
  +
| (key, ws) <- myExtraWorkspaces
  +
]</nowiki>}}
  +
  +
=== 重複したキーバインディングをチェックする ===
  +
  +
[https://hackage.haskell.org/package/xmonad-contrib-0.16/docs/XMonad-Util-EZConfig.html XMonad.Util.EZConfig] は、重複したキーバインディングをチェックする関数 {{ic|checkKeymap}} を提供しますそうでない場合、重複は黙って無視されます。
  +
  +
{{hc|xmonad.hs|
  +
<nowiki>main = xmonad $ myConfig
  +
  +
myKeymap = [("S-M-c", kill), ...]
  +
myConfig = def {
  +
...
  +
startupHook = do
  +
return () >> checkKeymap myConfig myKeymap
  +
...other operation you defined here...
  +
...
  +
} `additionalKeysP` myKeymap</nowiki>}}
  +
{{Note|
  +
* {{ic|return ()}} 上の例では、これは非常に重要です。そうしないと、無限相互再帰の問題が発生する可能性があります。
  +
* {{ic|return ()}} デッドロックを打破するのに十分な遅延が導入されます。myConfig の定義は、startupHook の定義に依存し、startupHook の定義は、myConfig の定義に依存します。}}
  +
  +
=== ドックやパネル、トレイ (Xmobar, Tint2, Conky など) のための空間を作る ===
  +
  +
ドックやパネル、トレイの空間を自動で調整するには XMonad.Hooks.ManageDocks の avoidStruts を使います:
  +
  +
import XMonad
  +
import XMonad.Hooks.ManageDocks
 
 
main=do
+
main=do
xmonad $ defaultConfig
+
xmonad $ def
{ ...
+
{ ...
, layoutHook=avoidStruts $ layoutHook defaultConfig
+
, layoutHook=avoidStruts $ layoutHook def
, manageHook=manageHook defaultConfig <+> manageDocks
+
, manageHook=manageHook def <+> manageDocks
, ...
+
, ...
}
+
}
   
  +
隙間を切り替えたい場合、以下のアクションをキーバインドに追加してください:
If you ever want to toggle the gaps, this action can be added to your key bindings:
 
 
,((modMask x, xK_b ), sendMessage ToggleStruts)
 
,((modMask x, xK_b ), sendMessage ToggleStruts)
   
  +
=== ウィンドウにタグを追加する ===
=== Using xmobar with xmonad ===
 
  +
  +
[https://hackage.haskell.org/package/xmonad-contrib-0.16/docs/XMonad-Actions-TagWindows.html XMonad.Actions.TagWindows] を使用すると、ユーザーは同じタグを持つウィンドウを操作できます。
  +
{{hc|xmonad.hs|
  +
...
  +
import XMonad.Actions.TagWindows
  +
...
  +
<nowiki>
  +
myKeys =
  +
... other key bindings ...
  +
-- Tag
  +
-- , ("M-C-t", withFocused (addTag "abc")) -- add a specific tag "abc"
  +
-- , ("M-C-d", withFocused (delTag "abc")) -- delete the tag "abc" from the focused window
  +
-- , ("M-C-h", withTaggedGlobalP "abc" shiftHere) -- shift windows with tag "abc" here
  +
, ("M-C-a", tagPrompt defaultXPConfig $ withFocused . addTag ) -- prompt for inputs of tag names
  +
, ("M-C-h", tagPrompt defaultXPConfig (`withTaggedGlobalP` shiftHere)) -- shift windows with user defined tags (input) here
  +
, ("M-C-d", tagDelPrompt defaultXPConfig) -- delete a user-defined tag (input)
  +
, ("M-C-t", tagPrompt defaultXPConfig focusUpTaggedGlobal) -- switch between windows in all workspaces with user-defined tags (input)
  +
, ("M-C-f", tagPrompt defaultXPConfig (`withTaggedGlobal` float)) -- float windows with user-defined tags (input)
  +
</nowiki>
  +
}}
  +
  +
=== ウィンドウ間のギャップを同じ大きさにする ===
  +
  +
個々のウィンドウと画面間のギャップを同じサイズにすることが目標の場合、次のコードは期待どおりに機能しません:
  +
layoutHook = spacing 10 $ Tall 1 (3/100) (1/2) ||| Full
  +
  +
これにより、各ウィンドウが各方向に独自の間隔を持つようになります。2つのウィンドウを並べて配置すると、中央の間隔が結合されて、必要な2倍の大きさの隙間が生じます。
  +
  +
回避策は、画面とウィンドウの間隔の両方を指定しますが、画面には上と左のマージン、ウィンドウには下と右のマージンのみを使用します。これを行うには、上記のコードを次のように変更します:
  +
  +
layoutHook = spacingRaw False (Border 10 0 10 0) True (Border 0 10 0 10) True $ Tall 1 (3/100) (1/2) ||| Full
  +
  +
=== xmonad で xmobar を使う ===
   
  +
[[xmobar]] は xmonad で使うことを想定して作られた軽量でミニマルなテキストベースのバーです。xmonad で xmobar を使うには、{{Pkg|xmonad}} パッケージに加えて2つのパッケージが必要になります: {{Pkg|xmonad-contrib}} と {{Pkg|xmobar}} です。また、{{Pkg|xmobar}} パッケージの代わりに {{AUR|xmobar-git}} を使うこともできます。
'''[[xmobar]]''' is a light and minimalistic text-based bar, designed to work with xmonad.
 
To use xmobar with xmonad, you will need two packages in addition to the {{Pkg|xmonad}} package. These packages are {{Pkg|xmonad-contrib}} and {{Pkg|xmobar}} from the [[official repositories]], or you can use {{AUR|xmobar-git}} from the [[Arch User Repository|AUR]] instead of the official {{Pkg|xmobar}} package.
 
   
  +
ここでは xmonad の中から xmobar を起動して、xmonad をリロードしたときに xmobar もリロードします。
Here we will start xmobar from within xmonad, which reloads xmobar whenever you reload xmonad.
 
   
Open {{ic|~/.xmonad/xmonad.hs}} in your favorite editor, and choose one of the two following options:
+
{{ic|~/.xmonad/xmonad.hs}} をお好きなエディタで開いて、以下のどちらかの設定を行なってください:
   
==== Quick, less flexible ====
+
==== クイック設定 ====
   
{{Note|There is also {{Pkg|dzen2}} which you can substitute for {{Pkg|xmobar}} in either case.}}
+
{{Note|{{Pkg|xmobar}} の代わりに {{Pkg|dzen2}} を使うこともできます。}}
   
  +
一般的なインポート:
Common imports:
 
 
import XMonad
 
import XMonad
 
import XMonad.Hooks.DynamicLog
 
import XMonad.Hooks.DynamicLog
   
  +
xmobar を起動して[[#複雑な設定]]で説明しているオプションを全て含んだ設定を返す xmobar アクション:
The xmobar action starts xmobar and returns a modified configuration that includes all of the options described in the [[xmonad#Option 2: More configurable|xmonad:Option2: More configurable]] choice.
 
main = xmonad =<< xmobar defaultConfig { modMask = mod4Mask {- or any other configurations here ... -}}
+
main = xmonad =<< xmobar def { modMask = mod4Mask {- or any other configurations here ... -}}
   
==== More Configurable ====
+
==== 複雑な設定 ====
   
As of xmonad(-contrib) 0.9, there is a new [http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Hooks-DynamicLog.html#v%3AstatusBar statusBar] function in [http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Hooks-DynamicLog.html XMonad.Hooks.DynamicLog]. It allows you to use your own configuration for:
+
xmonad(-contrib) 0.9 現在、[http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Hooks-DynamicLog.html XMonad.Hooks.DynamicLog] には新しい [https://hackage.haskell.org/package/xmonad-contrib-0.13/docs/XMonad-Hooks-DynamicLog.html#v:statusBar statusBar] 関数が存在します。以下のような設定が可能です:
  +
* バーを実行するのに使用するコマンド
* The command used to execute the bar
 
  +
* バーに書き込まれるものを決定する PP
* The PP that determines what is being written to the bar
 
  +
* バーの隙間を切り替えるキーバインド
* The key binding to toggle the gap for the bar
 
   
  +
使用例:
The following is an example of how to use it:
 
 
{{hc|~/.xmonad/xmonad.hs|<nowiki>
 
{{hc|~/.xmonad/xmonad.hs|<nowiki>
 
-- Imports.
 
-- Imports.
222行目: 364行目:
   
 
-- Main configuration, override the defaults to your liking.
 
-- Main configuration, override the defaults to your liking.
myConfig = defaultConfig { modMask = mod4Mask }
+
myConfig = def { modMask = mod4Mask }
 
</nowiki>}}
 
</nowiki>}}
   
==== Verify XMobar Config ====
+
==== XMobar の設定を確認 ====
   
  +
テンプレート・デフォルトの xmobarrc に含まれています。
The template and default xmobarrc contains this.
 
   
At last, open up {{ic|~/.xmobarrc}} and make sure you have {{ic|StdinReader}} in the template and run the plugin. E.g.
+
最後に {{ic|~/.xmobarrc}} を開いて {{ic|StdinReader}} がテンプレートに含まれていてプラグインを実行することを確認してください:
 
{{hc|~/.xmobarrc|<nowiki>
 
{{hc|~/.xmobarrc|<nowiki>
 
Config { ...
 
Config { ...
238行目: 380行目:
 
</nowiki>}}
 
</nowiki>}}
   
  +
設定が完了したら xmonad を再起動してください。
Now, all you should have to do is either to start, or restart, xmonad.
 
   
=== Controlling xmonad with external scripts ===
+
=== 外部スクリプトで xmonad を制御 ===
   
  +
複数の方法が存在します:
There are at least two ways to do this.
 
   
Firstly, you can use the following xmonad extension, [http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Hooks-ServerMode.html XMonad.Hooks.ServerMode].
+
* xmonad の拡張 [http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Hooks-ServerMode.html XMonad.Hooks.ServerMode] を使用する。
  +
* {{Pkg|xdotool}} などのプログラムを使ってキーの押下をシミュレートする [https://ubuntuforums.org/archive/index.php/t-658040.html Ubuntu フォーラムスレッド]。以下のコマンドは {{ic|Super+n}} の押下をシミュレートします:
 
Secondly, you can simulate keypress events using {{Pkg|xdotool}} or similar programs. See this [http://ubuntuforums.org/archive/index.php/t-658040.html Ubuntu forums thread]. The following command would simulate the keypress {{ic|Super+n}}:
 
 
xdotool key Super+n
 
xdotool key Super+n
   
  +
* desktopConfig や EwmhDesktops を設定している場合、使いやすいユーティリティとして {{Pkg|wmctrl}} が存在します。
=== Launching another window manager within xmonad ===
 
   
  +
=== xmonad の中で他のウィンドウマネージャを起動 ===
If you are using {{AUR|xmonad-darcs}}, as of January of 2011, you can restart to another window manager from within xmonad. You just need to write a small script, and add stuff to your {{ic|~/.xmonad/xmonad.hs}}. Here is the script.
 
  +
  +
{{AUR|xmonad-git}} を使用している場合、xmonad の中から他のウィンドウマネージャを再起動することができます (2011年1月現在)。小さなスクリプトを書いて {{ic|~/.xmonad/xmonad.hs}} に設定を追加するだけです。スクリプトは以下のようになります:
   
 
{{hc|~/bin/obtoxmd|<nowiki>
 
{{hc|~/bin/obtoxmd|<nowiki>
259行目: 402行目:
 
</nowiki>}}
 
</nowiki>}}
   
And here are the modifications you need to add to your {{ic|~/.xmonad/xmonad.hs}}:
+
そして {{ic|~/.xmonad/xmonad.hs}} に以下のような設定を追加してください:
   
 
{{hc|~/.xmonad/xmonad.hs|<nowiki>
 
{{hc|~/.xmonad/xmonad.hs|<nowiki>
269行目: 412行目:
 
-- And this "replace"
 
-- And this "replace"
 
replace
 
replace
xmonad $ defaultConfig
+
xmonad $ def
 
{
 
{
 
--Add the usual here
 
--Add the usual here
276行目: 419行目:
 
</nowiki>}}
 
</nowiki>}}
   
  +
以下のキーバインドも追加する必要があります:
You also need to add the following key binding:
 
 
{{hc|~/xmonad/xmonad.hs|<nowiki>
 
{{hc|~/xmonad/xmonad.hs|<nowiki>
 
--Add a keybinding as follows:
 
--Add a keybinding as follows:
282行目: 425行目:
 
</nowiki>}}
 
</nowiki>}}
   
Just remember to add a comma before or after and change the path to your actual script path. Now just {{ic|Mod+q}} (restart xmonad to refresh the config), and then hit {{ic|Mod+Shift+o}} and you should have Openbox running with the same windows open as in xmonad. To return to xmonad you should just exit Openbox. Here is a link to adamvo's {{ic|~/.xmonad/xmonad.hs}} which uses this setup [http://www.haskell.org/haskellwiki/Xmonad/Config_archive/adamvo%27s_xmonad.hs Adamvo's xmonad.hs]
+
カンマを前または後に追加してパスを実際のスクリプトのパスに置き換えてください。{{ic|Mod+q}} (xmonad を再起動して設定をリロード) を押してから {{ic|Mod+Shift+o}} を押せば xmonad と同じウィンドウが開いた Openbox が実行されます。xmonad に戻したいときは Openbox を終了してください。詳しくは [http://www.haskell.org/haskellwiki/Xmonad/Config_archive/adamvo%27s_xmonad.hs Adamvo xmonad.hs] を参照。
   
 
=== KDE と xmonad ===
 
=== KDE と xmonad ===
   
The xmonad wiki has instructions on how to [https://www.haskell.org/haskellwiki/Xmonad/Using_xmonad_in_KDE run xmonad inside KDE]
+
xmonad wiki には [https://www.haskell.org/haskellwiki/Xmonad/Using_xmonad_in_KDE KDE で xmonad を実行] する方法が書かれています。
   
  +
また、何らかの理由で xmonad が終了してしまったときのために、xmonad を起動するキーボードショートカットを KDE の中で設定しておくと良いでしょう。
It also might be a good idea to set a global keyboard shortcut in KDE to start xmonad in case it is accidentally killed or closed.
 
  +
  +
==== plasmashell の無効化 ====
  +
  +
デスクトップやタスクバー、トレイなどを管理する KDE5 の plasmashell を無効化すると良いでしょう:
  +
  +
$ cp /etc/xdg/autostart/plasmashell.desktop ~/.config/autostart/
  +
  +
以下のように {{ic|~/.config/autostart/plasmashell.desktop}} を編集して {{ic|1=Exec=plasmashell}} を {{ic|1=Exec=}} に置き換えてください:
  +
  +
{{hc|~/.config/autostart/plasmashell.desktop|<nowiki>
  +
[Desktop Entry]
  +
Exec=
  +
Name=Plasma Desktop Workspace
  +
... # more stuff
  +
</nowiki>}}
   
 
=== Skype 用の IM レイアウト ===
 
=== Skype 用の IM レイアウト ===
   
  +
新しいバージョンの Skype 用に IM レイアウトを作成するには、以下のコードを使用:
In orded to create an IM layout for the newer versions of skype, the following code can be used:
 
 
{{hc|xmonad.hs|<nowiki>
 
{{hc|xmonad.hs|<nowiki>
 
myIMLayout = withIM (1%7) skype Grid
 
myIMLayout = withIM (1%7) skype Grid
299行目: 457行目:
 
</nowiki>}}
 
</nowiki>}}
   
=== Example configurations ===
+
=== 設定例 ===
   
  +
以下は xmonad ユーザーの設定例です。あなたの設定も自由に追加してください。
Below are some example configurations from fellow xmonad users. Feel free to add links to your own.
 
   
* brisbin33 :: simple, useful, readable :: [https://github.com/pbrisbin/xmonad-config config] [http://files.pbrisbin.com/screenshots/current_desktop.png screenshot]
+
* brisbin33 :: simple, useful, readable :: [https://github.com/pbrisbin/xmonad-config 設定] [http://files.pbrisbin.com/screenshots/current_desktop.png スクリーンショット]
* jelly :: Configuration with prompt, different layouts, twinview with xmobar :: [http://github.com/jelly/dotfiles/tree/master/.xmonad/xmonad.hs xmonad.hs]
+
* jelly :: Configuration with prompt, different layouts, twinview with xmobar :: [https://github.com/jelly/dotfiles/tree/master/.xmonad/xmonad.hs xmonad.hs]
* MrElendig :: Simple configuration, with xmobar :: [http://github.com/MrElendig/dotfiles-alice/blob/master/.xmonad/xmonad.hs xmonad.hs], [http://github.com/MrElendig/dotfiles-alice/blob/master/.xmobarrc .xmobarrc], [http://arch.har-ikkje.net/gfx/ss/2010-09-05-163305_2960x1050_scrot.png screenshot].
+
* MrElendig :: xmobar を使用するシンプルな設定 :: [https://github.com/MrElendig/dotfiles-alice/blob/master/.xmonad/xmonad.hs xmonad.hs], [https://github.com/MrElendig/dotfiles-alice/blob/master/.xmobarrc .xmobarrc], [http://arch.har-ikkje.net/gfx/ss/2010-09-05-163305_2960x1050_scrot.png スクリーンショット]
* thayer :: A minimal mouse-friendly config ideal for netbooks :: [http://haskell.org/haskellwiki/Xmonad/Config_archive/Thayer_Williams%27_xmonad.hs configs] [http://haskell.org/haskellwiki/Image:Thayer-xmonad-20110511.png screenshot]
+
* thayer :: ネットブックにうってつけのミニマルなマウスフレンドリーな設定 :: [http://haskell.org/haskellwiki/Xmonad/Config_archive/Thayer_Williams%27_xmonad.hs 設定] [http://haskell.org/haskellwiki/Image:Thayer-xmonad-20110511.png スクリーンショット]
* vicfryzel :: Beautiful and usable xmonad configuration, along with xmobar configuration, xinitrc, dmenu, and other scripts that make xmonad more usable. :: [https://github.com/vicfryzel/xmonad-config git repository], [https://github.com/vicfryzel/xmonad-config/raw/master/screenshot.png screenshot].
+
* vicfryzel :: Beautiful and usable xmonad configuration, along with xmobar configuration, xinitrc, dmenu, and other scripts that make xmonad more usable. :: [https://github.com/vicfryzel/xmonad-config git リポジトリ], [https://github.com/vicfryzel/xmonad-config/raw/master/screenshot.png スクリーンショット]
 
* vogt :: Check out adamvo's config and many others in the official [http://haskell.org/haskellwiki/Xmonad/Config_archive Xmonad/Config archive]
 
* vogt :: Check out adamvo's config and many others in the official [http://haskell.org/haskellwiki/Xmonad/Config_archive Xmonad/Config archive]
  +
* wulax :: Xfce の中で xmonad を使用するサンプル。GIMP 用の2つのレイアウト。 :: [https://gist.github.com/jsjolund/94f6821b248ff79586ba xmonad.hs], [https://i.imgur.com/at9AbOl.png スクリーンショット]
  +
* alex-courtis :: Clean xmonad, xmobar, media keys, screenshot, j4/dmenu; fonts rendered at the DPI reported by the monitor :: [https://github.com/alex-courtis/arch/blob/ea77edca1a1cd92e87d9c403dae891d03b9ee94e/home/.xmonad/xmonad.hs xmonad.hs], [https://raw.githubusercontent.com/alex-courtis/arch/master/ss.png screenshot].
   
 
== トラブルシューティング ==
 
== トラブルシューティング ==
 
=== GNOME 3 と xmonad ===
 
 
With the release of [[GNOME]] 3, some additional steps are necessary to make GNOME play nicely with xmonad.
 
 
Either install {{AUR|xmonad-gnome3}} from the AUR, or, manually:
 
 
Add an xmonad session file for use by gnome-session ({{ic|/usr/share/gnome-session/sessions/xmonad.session}}):
 
 
{{bc|1=
 
[GNOME Session]
 
Name=Xmonad session
 
RequiredComponents=gnome-panel;gnome-settings-daemon;
 
RequiredProviders=windowmanager;notifications;
 
DefaultProvider-windowmanager=xmonad
 
DefaultProvider-notifications=notification-daemon
 
}}
 
 
Create a desktop file for GDM ({{ic|/usr/share/xsessions/xmonad-gnome-session.desktop}}):
 
{{bc|1=
 
[Desktop Entry]
 
Name=Xmonad GNOME
 
Comment=Tiling window manager
 
TryExec=/usr/bin/gnome-session
 
Exec=gnome-session --session=xmonad
 
Type=XSession
 
}}
 
 
Create or edit this file ({{ic|/usr/share/applications/xmonad.desktop}}):
 
{{bc|1=
 
[Desktop Entry]
 
Type=Application
 
Encoding=UTF-8
 
Name=Xmonad
 
Exec=xmonad
 
NoDisplay=true
 
X-GNOME-WMName=Xmonad
 
X-GNOME-Autostart-Phase=WindowManager
 
X-GNOME-Provides=windowmanager
 
X-GNOME-Autostart-Notify=false
 
}}
 
 
Finally, install {{pkg|xmonad-contrib}} and create or edit {{ic|~/.xmonad/xmonad.hs}} to have the following
 
 
{{bc|1=
 
import XMonad
 
import XMonad.Config.Gnome
 
 
main = xmonad gnomeConfig
 
}}
 
 
Xmonad should now appear in the list of GDM sessions and also play nicely with gnome-session itself.
 
 
==== GNOME と Xmonad でコンポジット ====
 
 
Some applications look better (e.g. GNOME Do) when composition is enabled. This is, however not, the case in the default Xmonad window manager. To enable it add an additional .desktop file {{ic|/usr/share/xsessions/xmonad-gnome-session-composite.desktop}}:
 
{{bc|1=
 
[Desktop Entry]
 
Name=Xmonad GNOME (Composite)
 
Comment=Tiling window manager
 
TryExec=/usr/bin/gnome-session
 
Exec=/usr/sbin/gnome-xmonad-composite
 
Type=XSession
 
}}
 
 
And create {{ic|/usr/sbin/gnome-xmonad-composite}} and {{ic|chmod +x /usr/sbin/gnome-xmonad-composite}}:
 
 
{{bc|1=
 
xcompmgr &
 
gnome-session --session=xmonad
 
}}
 
 
Now choose "Xmonad GNOME (Composite)" in the list of sessions during login. Reference {{ic|man xcompmgr}} for additional "eye candy".
 
   
 
=== Xfce 4 と xmonad ===
 
=== Xfce 4 と xmonad ===
   
  +
{{ic|~/.xmonad/xmonad.hs}} で {{ic|XMonad.Config.Xfce}} をインポートしたら {{ic|defaultConfig}} の代わりに {{ic|xfceConfig}} を使ってください:
Use {{ic|xfceConfig}} instead of {{ic|defaultConfig}} after importing {{ic|XMonad.Config.Xfce}} in {{ic|~/.xmonad/xmonad.hs}}, e.g. adapting the minimal config above:
 
   
 
import XMonad
 
import XMonad
 
import XMonad.Config.Xfce
 
import XMonad.Config.Xfce
  +
 
 
main = xmonad xfceConfig
 
main = xmonad xfceConfig
 
{ terminal = "urxvt"
 
{ terminal = "urxvt"
397行目: 484行目:
 
}
 
}
   
Also add an entry to ''Settings > Session and Startup > Application Autostart'' that runs {{ic|xmonad --replace}}.
+
また、''Settings > Session and Startup > Application Autostart'' から {{ic|xmonad --replace}} を実行するエントリを追加してください。
   
=== Missing xmonad-i386-linux or xmonad-x86_64-linux ===
+
=== xmonad-x86_64-linux が存在しない ===
   
Xmonad should automatically create the {{ic|xmonad-i386-linux}} file (in {{ic|~/.xmonad/}}). If this it not the case, grab a configuration file from the [http://haskell.org/haskellwiki/Xmonad/Config_archive xmonad wiki] or create your [http://haskell.org/haskellwiki/Xmonad/Config_archive/John_Goerzen's_Configuration own]. Put the {{ic|.hs}} and all others files in {{ic|~/.xmonad/}} and run this command from the folder:
+
Xmonad は自動的に {{ic|xmonad-i386-linux}} ファイルを ({{ic|~/.xmonad/}} の中に) 作成します。作成されない場合、[http://haskell.org/haskellwiki/Xmonad/Config_archive xmonad wiki] から設定を入手するか [http://haskell.org/haskellwiki/Xmonad/Config_archive/John_Goerzen's_Configuration 自分で] 設定を書いてください。{{ic|.hs}} などのファイルを {{ic|~/.xmonad/}} に配置したら、フォルダの中から以下のコマンドを実行:
 
xmonad --recompile
 
xmonad --recompile
   
  +
これでファイルが出来るはずです。
Now you should see the file.
 
   
  +
{{Note|{{Pkg|xmonad-contrib}} がインストールされていないために xmonad-x86_64-linux が見つからないというエラーメッセージが表示されることもあります。}}
{{Note|A reason you may get an error message saying that xmonad-x86_64-linux is missing is that {{Pkg|xmonad-contrib}} is not installed.}}
 
   
 
=== Java アプリケーションの問題 ===
 
=== Java アプリケーションの問題 ===
   
標準の Java GUI ツールキットは、ハードコーディングされた "non-reparenting" ウィンドウマネージャのリストを持っています。 xmonad はそのリストに含まれておらず、稼働中にいくつかの問題が発生する Java アプリケーションがあります。 最も一般的な問題の一つは、Java アプリケーションが GUI をレンダリングする代わりに無地で灰色の box をレンダリングする、 "gray blobs" です。
+
標準の [[Java]] GUI ツールキットは、ハードコーディングされた "non-reparenting" ウィンドウマネージャのリストを持っています。xmonad はそのリストに含まれておらず、稼働中にいくつかの問題が発生する Java アプリケーションがあります。最も一般的な問題の一つは、Java アプリケーションが GUI をレンダリングする代わりに無地で灰色の box をレンダリングする、"gray blobs" です。
   
 
これを解決できる方法はいくつかあります。
 
これを解決できる方法はいくつかあります。
   
* {{Pkg|jre7-openjdk}} や {{Pkg||jre8-openjdk}} ならば、 {{ic|/etc/profile.d/jre.sh}} {Ic|1=export _JAVA_AWT_WM_NONREPARENTING=1}} 追記してください。 そして、そのファイル {{ic|/etc/profile.d/jre.sh}} を source するか、再ログインしてください。
+
* {{Pkg|jre7-openjdk}} や {{Pkg|jre8-openjdk}} ならば、 {{ic|/etc/profile.d/jre.sh}} {{Ic|1=export _JAVA_AWT_WM_NONREPARENTING=1}} 追記してください。そして、そのファイル {{ic|/etc/profile.d/jre.sh}} を source するか、再ログインしてください。
* Oracle の JRE/JDK ならば、 [http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Hooks-SetWMName.html SetWMName.] を使用してください。 しかし、その効果は {{ic|XMonad.Hooks.EwmhDesktops}} も使用すると打ち消されてしまうかもしれません。 この場合は、
+
* Oracle の JRE/JDK ならば、[https://wiki.haskell.org/Xmonad/Frequently_asked_questions#Using_SetWMName SetWMName] を使用してください。しかし、その効果は {{ic|XMonad.Hooks.EwmhDesktops}} も使用すると打ち消されてしまうかもしれません。この場合は、
   
 
>> setWMName "LG3D"
 
>> setWMName "LG3D"
421行目: 508行目:
 
を {{ic|LogHook}} に追記することで解決されるでしょう。
 
を {{ic|LogHook}} に追記することで解決されるでしょう。
   
より多くの情報を得るためには、 [http://haskell.org/haskellwiki/Xmonad/Frequently_asked_questions#Problems_with_Java_applications.2C_Applet_java_console] を参照してください。
+
より多くの情報を得るためには、[http://haskell.org/haskellwiki/Xmonad/Frequently_asked_questions#Problems_with_Java_applications.2C_Applet_java_console] を参照してください。
   
 
=== gvim やターミナルの底部の空きスペース ===
 
=== gvim やターミナルの底部の空きスペース ===
  +
スペースを背景色と合わせる方法は [[Vim#gVim ウィンドウの底部の空きスペース|Vim#gVim ウィンドウの底部の空きスペース]] を見て下さい。
 
  +
スペースを背景色と合わせる方法は [[Vim#gVim ウィンドウの底部の空きスペース]]を見てください。
   
 
[[rxvt-unicode]] の場合、{{AUR|rxvt-unicode-patched}} が使えます。
 
[[rxvt-unicode]] の場合、{{AUR|rxvt-unicode-patched}} が使えます。
   
You can also configure xmonad to respect size hints, but this will leave a gap instead. See [http://www.eng.uwaterloo.ca/~aavogt/xmonad/docs/xmonad-contrib/XMonad-Layout-LayoutHints.html the documentation on Xmonad.Layout.LayoutHints].
+
サイズヒントを使うように xmonad を設定することもできます。ただし隙間は残ります。詳しくは [http://www.eng.uwaterloo.ca/~aavogt/xmonad/docs/xmonad-contrib/XMonad-Layout-LayoutHints.html Xmonad.Layout.LayoutHints のドキュメント] を参照してください。
   
 
=== Chromium/Chrome がフルスクリーンにならない ===
 
=== Chromium/Chrome がフルスクリーンにならない ===
  +
If Chrome fails to go fullscreen when {{ic|F11}} is pressed, you can use the [http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Hooks-EwmhDesktops.html XMonad.Hooks.EwmhDesktops] extension found in the {{Pkg|xmonad-contrib}} package. Simply add the {{ic|import}} statement to your {{ic|~/.xmonad/xmonad.hs}}:
 
  +
{{ic|F11}} を押したときに Chrome がフルスクリーンにならない場合、{{Pkg|xmonad-contrib}} パッケージに含まれている [http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Hooks-EwmhDesktops.html XMonad.Hooks.EwmhDesktops] 拡張を使ってください。{{ic|~/.xmonad/xmonad.hs}} に以下の {{ic|import}} 文を追加するだけです:
 
import XMonad.Hooks.EwmhDesktops
 
import XMonad.Hooks.EwmhDesktops
   
and then add {{ic|handleEventHook <nowiki>=</nowiki> fullscreenEventHook}} to the appropriate place; for example:
+
それから適当な場所に {{ic|handleEventHook <nowiki>=</nowiki> fullscreenEventHook}} を追加してください。例:
 
{{bc|<nowiki>
 
{{bc|<nowiki>
 
...
 
...
444行目: 533行目:
 
</nowiki>}}
 
</nowiki>}}
   
After a recompile/restart of xmonad, Chromium should now respond to {{ic|F11}} (fullscreen) as expected.
+
xmonad の再コンパイル・再起動後に、Chromium {{ic|F11}} (fullscreen) が使えるようになるはずです。
   
=== Multitouch / touchegg ===
+
=== マルチタッチ / touchegg ===
   
Touchégg polls the window manager for the {{ic|_NET_CLIENT_LIST}} (in order to fetch a list of windows it should listen for mouse events on.) By default, xmonad does not supply this property. To enable this, use the [http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Hooks-EwmhDesktops.html XMonad.Hooks.EwmhDesktops] extension found in the {{Pkg|xmonad-contrib}} package.
+
Touchégg はウィンドウマネージャから {{ic|_NET_CLIENT_LIST}} を定期的に取得します (マウスイベントを取得するウィンドウのリストを確認するため)。デフォルトでは xmonad はこのプロパティを提供していません。有効にするには、{{Pkg|xmonad-contrib}} パッケージに含まれている [http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Hooks-EwmhDesktops.html XMonad.Hooks.EwmhDesktops] 拡張を使ってください。
   
  +
=== azerty キーボードレイアウトのキーバインドの問題 ===
=== Keybinding issues with an azerty keyboard layout ===
 
   
Users with a keyboard with azerty layout can run into issues with certain keybindings. Using the [http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Config-Azerty.html XMonad.Config.Azerty] module will solve this.
+
azerty レイアウトのキーボードを使っている場合、特定のキーバインドに問題が発生します。[http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Config-Azerty.html XMonad.Config.Azerty] モジュールを使うことで問題は解決します。
   
=== GNOME 3 mod4+p changes display configuration instead of launching dmenu ===
+
=== GNOME 3 mod4+p dmenu が起動するかわりにディスプレイの設定が変更されてしまう ===
   
  +
gnome-control-center のディスプレイ設定を切り替える必要がない場合、ユーザーで以下を実行することで xrandr プラグインで Super+p を使用するのを止めさせることができます:
If you do not need the capability to switch the display-setup in the gnome-control-center, just execute
 
{{bc|<nowiki>dconf write /org/gnome/settings-daemon/plugins/xrandr/active false</nowiki>}}
+
$ dconf write /org/gnome/settings-daemon/plugins/xrandr/active false
as your user, to disable the xrandr plugin which grabs Super+p.
 
   
  +
=== Chrome/Chromium で定義されたウィンドウのボーダーの色が表示されない ===
=== Problems with focused border in VirtualBox ===
 
   
  +
Chromium および Chrome ブラウザウィンドウには、デフォルトで定義されたボーダーの色はなく、ぼやけた透明なボーダーの色が表示されます。[https://xmonad.haskell.narkive.com/3NiS9dFl/transparent-border-with-chrome-beta-unstable この問題は長い間知られていました] が、修正するのは簡単です。
A known issue with Virtualbox ([https://www.virtualbox.org/ticket/6479 Ticket #6479]) can cause problems with the focused window border. A solution can be found by installing a compositing manager like [[xcompmgr]] which overrides the incorrect behavior of vboxvideo.
 
  +
ブラウザのオプションで `Use system title bar and borders` を有効にすると、この問題はすぐに修正されます。
   
  +
=== VirtualBox でフォーカスしたボーダーの問題 ===
=== Steam のゲーム (Half-Life, Left 4 Dead, …) と xmonad ===
 
   
  +
Virtualbox には既知の問題 ([https://www.virtualbox.org/ticket/6479 Ticket #6479]) が存在し、フォーカスされたウィンドウのボーダーに問題が発生します。[[xcompmgr]] などのコンポジットマネージャをインストールして vboxvideo の挙動を上書きすることで解決できます。
There seems to be some trouble with Source engine based game (like Half-Life). If they don't start or get stuck with a black screen a workaround it to start them in window mode: right click on the game in your library and choose properties, click on launch options and enter: [http://steamcommunity.com/app/221410/discussions/0/864960353968561426/]
 
  +
  +
=== Steam のゲーム (Half-Life, Left 4 Dead, ...) と xmonad ===
  +
  +
Source エンジンを使っているゲーム (Half-Life など) で問題が発生することがあります。ゲームが起動しなかったり黒い画面から進まないときは、ウィンドウモードで起動してみてください: ライブラリのゲームを右クリックして、起動オプションに以下のように入力 ([https://steamcommunity.com/app/221410/discussions/0/864960353968561426/] を参照):
 
 
 
-windowed
 
-windowed
   
  +
manage フックを使用してゲームのウィンドウをフロートさせる方法もあります。例えば、Half-Life の場合なら以下の行を使います:
Another solution is to float the window of the game using the manage hook. For example, the following line can be used for Half-Life:
 
  +
  +
className =? "hl_linux" --> doFloat
  +
  +
=== LibreOffice - メインウィンドウとダイアログ間のフォーカスフリック ===
  +
  +
LibreOffice UI は、デスクトップ環境外ではデフォルトで gtk エンジンになります。これにより、一部の xmonad 設定で問題が発生し、LibreOffice メインウィンドウと開いている LibreOffice ダイアログウィンドウの間でフォーカスが急速に移動する可能性があり、アプリケーションを効果的にロックします。この場合、[[環境変数]] {{ic|SAL_USE_VCLPLUGIN}} を設定して、[[LibreOffice#テーマ]] で説明されているように、LibreOffice に別の UI テーマを明示的に強制的に使用させることができます。
  +
  +
$ export SAL_USE_VCLPLUGIN=gen lowriter
  +
  +
一般 (QT) UI を使用します。
  +
  +
=== IntelliJ IDEA と xmonad ===
  +
  +
==== ダイアログウィンドウ ====
  +
  +
[[IntelliJ IDEA]] では、タイルウィンドウマネージャーのサポートが強化されました。しかし、依然として厄介な問題がいくつかあり、その一部には簡単な解決策があります:
  +
  +
* マウスポインタがダイアログウィンドウの境界の外に出ると、''Find In Files'' ダイアログウィンドウがすぐに閉じます。これは ''Find In Files'' ダイアログウィンドウでのみ発生し、''Navigate to...'' ダイアログウィンドウでは再現できません。"focus follows mouse" ロジックを想定している場合、''Find In Files'' の動作は予期されています。すべてのシステムへのフォーカスが失われると、''Find In Files'' ウィンドウが閉じます。
  +
:'''解決策''': ポップアップを ''固定'' することで変更できます。対応するボタンが右上隅にあります [https://youtrack.jetbrains.com/issue/IDEA-65637#focus=Comments- 27-5142464.0-0】
  +
* Git コミット間で変更されたファイルを表示すると (''aaaa とローカルバージョン bbbb 間の変更'' ダイアログを使用)、ファイルレベルの差分を含むウィンドウがダイアログウィンドウの後ろに開きます。
  +
:'''解決策''': 不明
  +
  +
=== アップデート後に共有ライブラリが見つからない ===
  +
  +
xmonad の実行ファイルは {{ic|~/.xmonad/}} に存在します。xmonad のアップグレード後、古い実行ファイルが残っている場合、削除することで xmonad は新しい実行ファイルをコンパイルします。もしくは {{ic|xmonad --recompile}} を使ってください。
  +
  +
この再コンパイルの作業は、次のように {{ic|/etc/pacman.d/hooks/xmonad.hook}} に pacman のフックを作成することで自動化できます (まず {{ic|hooks}} デイレクトリを作成する必要があるかもしれません)。
  +
  +
[Trigger]
  +
Operation = Upgrade
  +
Type = Package
  +
Target = xmonad
  +
  +
[Action]
  +
Description = Recompiling xmonad...
  +
When = PostTransaction
  +
Exec = /usr/bin/sudo -u YOUR_USERNAME /usr/bin/xmonad --recompile
  +
  +
{{ic|YOUR_USERNAME}} は xmonad を実行するユーザーの名前に置き換えてください。
  +
  +
{{ic|xmonad --recompile}} で ({{ic|XMonad}} 自体も含む) モジュールが全く認識されない場合、パッケージのデータベースキャッシュを再生成してみてください:
  +
  +
sudo ghc-pkg recache
  +
  +
=== XMonad.Prompt とウィンドウが壊れているか欠落している ===
   
  +
XMonad はデフォルトでフォント {{ic|-misc-fixed-*-*-*-*-10-*-*-*-*-*-*-*}} を使用します [https://wiki.haskell.org/Xmonad/Frequently_asked_questions#Tabbed_or_other_decorated_layouts_not_shown]
className =? "hl_linux" --> doFloat
 
  +
このフォントが見つからない場合、それらのウィンドウはレンダリングに失敗します。最も簡単な修正は、{{Pkg|xorg-fonts-misc}} をインストールすることです。
   
 
== 参照 ==
 
== 参照 ==
481行目: 620行目:
 
*[https://bbs.archlinux.org/viewtopic.php?id=94969 Share your xmonad desktop!]
 
*[https://bbs.archlinux.org/viewtopic.php?id=94969 Share your xmonad desktop!]
 
*[https://bbs.archlinux.org/viewtopic.php?id=40636 xmonad hacking thread]
 
*[https://bbs.archlinux.org/viewtopic.php?id=40636 xmonad hacking thread]
  +
*[https://github.com/alexkay/xmonad-log-applet xmonad-log-applet] - GNOME, MATE, Xfce パネルのアプレット

2024年2月3日 (土) 04:41時点における最新版

関連記事

xmonad は、X のタイル型ウィンドウマネージャです。画面を分割し、重なり合わないようにウィンドウを配置することで、画面を最大限に活用することができます。ウィンドウマネージャの機能はキーボードから利用することができます (マウスはオプションです)。

xmonad は Haskell で実装されており、設定や拡張も Haskell で書かれています。レイアウトやキーバインド、その他の設定はユーザーが設定ファイルに書き込むことで変更できます。

レイアウトは動的に適用され、各ワークスペース上で異なるレイアウトを使用することができます。Xinerama が完全にサポートされ、ウィンドウを複数のモニタで並べて表示することができます。

詳細は、xmonad のウェブサイトをご覧ください: http://xmonad.org/

目次

インストール

xmonadインストールしてください。これには基本的な設定が含まれています。追加のタイリングアルゴリズムや設定、スクリプトなど便利なデスクトップ設定を含んでいる xmonad-contrib もインストールすることを推奨します。

また、開発版の xmonad-gitAURxmonad-contrib-gitAUR をインストールすることもできます。

ノート: xmonad をアップグレードしたら xmonad --recompile を忘れずに実行してください。次回起動時に共有ライブラリが見つからずに問題が発生する可能性があります。これを自動的に実行したい場合は#アップデート後に共有ライブラリが見つからないを見て設定してください。

xmonad の起動

xmonad を自動起動するには、起動スクリプトに xmonad コマンドを追加します (例えば、startx を使う場合 ~/.xinitrcXDM ログインマネージャを使う場合 ~/.xsession)。GDMKDM を使う場合は、新しいセッションファイルを作成し、セッションメニューから xmonad を選択します。

Xterm パッケージをインストールするか、設定でターミナルエミュレータを変更しないと Xmonad の中で何もできなくなるので注意してください。

ノート: xmonad はデフォルトでは X のマウスカーソルを変更しません。すなわち、マウスカーソルはクロスマーク x です。左矢印 left_ptr に設定するには起動スクリプト (例: ~/.xinitrc) に以下を追加します: xsetroot -cursor_name left_ptr。こちらも参照してみて下さい カーソルテーマ#形が X のデフォルトカーソルの変更

また、標準では US キーボードレイアウトなので、必要に応じて変更します。例えば日本語キーボードレイアウトは ~/.xinitrc に以下を追加します。キーボードレイアウトの設定についてはここを参照してください。:

$ setxkbmap -layout jp

~/.xinitrc:

# set the cursor
xsetroot -cursor_name left_ptr
# set Japanese keyboard layout
setxkbmap -layout jp
# start xmonad
exec xmonad

もし、起動しない場合はホームディレクトリに .xmonad ディレクトリがあるか確認してください。もしない場合は作成します。

$ mkdir ~/.xmonad

詳細については、xinitrc を参照してください。

設定

xmonad ユーザーは ~/.xmonad/xmonad.hs を修正することで xmonad をカスタマイズすることができます。再コンパイルは Mod+q ショートカットでその場で自動的にされます。

ディレクトリ ~/.xmonad がない場合は xmonad --recompile を実行してディレクトリを作成します。

xmonad のデフォルトの設定は非常に優秀で、xmonad.hs がなくても実行することができます。そのため、xmonad --recompile を実行したあとでも ~/.xmonad/xmonad.hs は多分無いでしょう。あなたがそれをカスタマイズしたいのならば、ファイルを作成しそれを編集していきましょう。

xmonad の設定ファイルは Haskell で書かれているため、プログラマーでないとなかなか設定が難しいと思われます。設定例や詳細方法は以下のページを参照して下さい:

最善の方法は組み込みの def 関数を使用し、必要なところを ~/.xmonad/xmonad.hs で変更やカスタマイズをすることです。

次のように xmonad.hs を書くことによって設定します:

import XMonad

main = xmonad def
    { terminal    = "urxvt"
    , modMask     = mod4Mask
    , borderWidth = 3
    }

この例では、デフォルトの設定に端末とボーダーの設定を上書きします (その他の設定は def 関数から継承されます)。

より複雑になるにつれ、それぞれ別の関数で設定しメイン関数内でそれらの関数を呼び出したほうが便利です。これによって、大規模なカスタマイズをするときに保守が簡易になります。

上記の簡単な xmonad.hs は次のように書くことができます:

import XMonad

main = do
  xmonad $ def
    { terminal    = myTerminal
    , modMask     = myModMask
    , borderWidth = myBorderWidth
    }

myTerminal    = "urxvt"
myModMask     = mod4Mask -- Win key or Super_L
myBorderWidth = 3

また、Haskell では import が最初にあれば、トップレベルの要素 (main, myTerminal, myModMask 等) や {} 内の順序は重要ではありません。

以下は この 設定ファイルの一部です。これは一般的な機能の一例です。

{
  terminal           = myTerminal,
  focusFollowsMouse  = myFocusFollowsMouse,
  borderWidth        = myBorderWidth,
  modMask            = myModMask,
  -- numlockMask deprecated in 0.9.1
  -- numlockMask        = myNumlockMask,
  workspaces         = myWorkspaces,
  normalBorderColor  = myNormalBorderColor,
  focusedBorderColor = myFocusedBorderColor,
  -- key bindings
  keys               = myKeys,
  mouseBindings      = myMouseBindings,
  -- hooks, layouts
  layoutHook         = myLayout,
  manageHook         = myManageHook,
  handleEventHook    = myEventHook,
  logHook            = myLogHook,
  startupHook        = myStartupHook
}

パッケージにも xmonad.hs が入っており、これは xmonad.hs の最新の公式サンプルです。どうやって設定を上書きするのかその例となる xmonad Haskell モジュールとなっています。ただし、これは自分自身の設定へピックアップしていくための例を集めたものとなっていて、直接これをテンプレートとして使用することは避けてください。/usr/share/ の中にアーキテクチャとバージョン別に置かれています (例: find /usr/share -name xmonad.hs)。

デスクトップ設定のベース

xmonad-contrib にはデスクトップとして使うためのデフォルト設定があります。Chromium など新しいプログラムで発生する問題を解決します。

以下のように追加してください:

import XMonad
import XMonad.Config.Desktop

main = xmonad desktopConfig
    { terminal    = "urxvt"
    , modMask     = mod4Mask
    }

Xmonad の終了

Mod+Shift+q で xmonad を終了させることができます。Mod はデフォルトでは Alt になっています。

ヒントとテクニック

X-Selection-Paste

Xmonad でのキーボードによる操作は X-Selection-Paste のキーボードショートカットを使うことで更に良くなります。

また、XMonad.Util.Paste に存在する "pasteSelection" 関数を以下のようにキーにバインドすることもできます:

xmonad.hs
  import XMonad.Util.Paste -- Remember to include this line
  -- X-selection-paste buffer
  , ((0, xK_Insert), pasteSelection)

"Insert" キーを押すとアクティブウィンドウにマウスバッファが貼り付けられるようになります。

警告:
  • "pasteSelection" は XMonad.Util.XSelection にある "getSelection" を使用しており、"getSelectin" の欠陥を受け継いでいます。
  • "getSelection" は 「根本的に間違った実装になっていて、デッドロックやクラッシュなどの故障になり得ます」。詳細は [1] を見て下さい。
  • 実際問題としては、これらのエラーは存在するものの、起きることは非常に稀です。
ヒント: より詳しい事は [2] にあります。

キーボードショートカット

デフォルトのキーボードショートカットは、 xmonad の man page xmonad(1) § NOTES に列挙されています。

バインドされていないキーをターゲットにする

もし xmonad をスタンドアローンなウィンドウマーネージャとして使うのであれば、 xmonad.hs にバインドされていないキーボードのキーを追加できます。することは、まずキーの Xf86 キーネーム (XF86PowerDown のようなやつ) を、/usr/include/X11/XF86keysym.h で探します。するとキーコード (たとえば 0x1008FF2A) が分かるので、xmonad.hs のキーバインディング部分に次の様に追加します:

((0,    0x1008FF2A), spawn "sudo pm-suspend")

マウスで画面の端をタッチして X () アクションを実行する

XMonad.Hooks.ScreenCorners を使用すると、ユーザーは XMonad を使用して KDE のような画面コーナーを設けることができます。

ScreenCorners でワークスペースを切り替える (KDE のような)

startHook で一連の操作を定義します:

xmonad.hs

...
import XMonad.Hooks.ScreenCorners
...

mystartupHook = do
...
... example ...
     addScreenCorners [ (SCLowerLeft,  prevWS)
                        , (SCLowerRight, nextWS)
                        , (SCUpperLeft, spawnSelected' myAppGrid)
                        , (SCUpperRight, goToSelected $ mygridConfig' myColorizer)
                      ]
...

次に、screenCornerEventHook を handleEventHook に追加します:

   myConfig = def {
   ...
       handleEventHook = ... <+> screenCornerEventHook <+> ...
   ...
   }

最後に screenCornerLayoutHook を追加します:

   ...
   myLayoutHook = screenCornerLayoutHook $ ......
   ...
   myConfig = def {
   ...
   layoutHook = myLayoutHook 
   ...
   }
ノート:
  • この拡張機能は、KDE ​​のような画面コーナーを XMonad に追加します。
  • * カーソルを画面隅の1つに移動すると、XMonad.Actions.GridSelect.goToSelected や XMonad.Actions.CycleWS.nextWS などの X () アクションをトリガーできます。

ワークスペースの数を増やす

デフォルトでは、xmonad は9つのワークスペースを使います。以下のように拡張することでワークスペースの数を増やすことが可能です:

xmonad.hs
import XMonad
import XMonad.Util.EZConfig (additionalKeys)

main=do
  xmonad $ def
    { ...
    , workspaces = myWorkspaces
    , ...
    } `additionalKeys` myAdditionalKeys

myWorkspaces = ["1","2","3","4","5","6","7","8","9"] ++ (map snd myExtraWorkspaces) -- you can customize the names of the default workspaces by changing the list

myExtraWorkspaces = [(xK_0, "0")] -- list of (key, name)

myAdditionalKeys =
    [ -- ... your other hotkeys ...
    ] ++ [
        ((myModMask, key), (windows $ W.greedyView ws))
        | (key, ws) <- myExtraWorkspaces
    ] ++ [
        ((myModMask .|. shiftMask, key), (windows $ W.shift ws))
        | (key, ws) <- myExtraWorkspaces
    ]

重複したキーバインディングをチェックする

XMonad.Util.EZConfig は、重複したキーバインディングをチェックする関数 checkKeymap を提供しますそうでない場合、重複は黙って無視されます。

xmonad.hs
main = xmonad $ myConfig

myKeymap = [("S-M-c", kill), ...]
myConfig = def {
    ...
    startupHook = do
        return () >> checkKeymap myConfig myKeymap
        ...other operation you defined here...
    ...
} `additionalKeysP` myKeymap
ノート:
  • return () 上の例では、これは非常に重要です。そうしないと、無限相互再帰の問題が発生する可能性があります。
  • return () デッドロックを打破するのに十分な遅延が導入されます。myConfig の定義は、startupHook の定義に依存し、startupHook の定義は、myConfig の定義に依存します。

ドックやパネル、トレイ (Xmobar, Tint2, Conky など) のための空間を作る

ドックやパネル、トレイの空間を自動で調整するには XMonad.Hooks.ManageDocks の avoidStruts を使います:

import XMonad
import XMonad.Hooks.ManageDocks

main=do
  xmonad $ def
    { ...
    , layoutHook=avoidStruts $ layoutHook def
    , manageHook=manageHook def <+> manageDocks
    , ...
    }

隙間を切り替えたい場合、以下のアクションをキーバインドに追加してください:

,((modMask x, xK_b     ), sendMessage ToggleStruts)

ウィンドウにタグを追加する

XMonad.Actions.TagWindows を使用すると、ユーザーは同じタグを持つウィンドウを操作できます。

xmonad.hs
...
import XMonad.Actions.TagWindows
...

myKeys = 
... other key bindings ...
-- Tag
         --  , ("M-C-t", withFocused (addTag "abc")) -- add a specific tag "abc"
         --  , ("M-C-d", withFocused (delTag "abc")) -- delete the tag "abc" from the focused window
         --  , ("M-C-h", withTaggedGlobalP "abc" shiftHere) -- shift windows with tag "abc" here
             , ("M-C-a", tagPrompt defaultXPConfig $ withFocused . addTag ) -- prompt for inputs of tag names
             , ("M-C-h", tagPrompt defaultXPConfig (`withTaggedGlobalP` shiftHere))  -- shift windows with user defined tags (input) here
             , ("M-C-d", tagDelPrompt defaultXPConfig)  -- delete a user-defined tag (input)
             , ("M-C-t", tagPrompt defaultXPConfig  focusUpTaggedGlobal)  -- switch between windows in all workspaces with user-defined tags (input)
             , ("M-C-f", tagPrompt defaultXPConfig (`withTaggedGlobal` float)) -- float windows with user-defined tags (input)

ウィンドウ間のギャップを同じ大きさにする

個々のウィンドウと画面間のギャップを同じサイズにすることが目標の場合、次のコードは期待どおりに機能しません:

layoutHook = spacing 10 $ Tall 1 (3/100) (1/2) ||| Full

これにより、各ウィンドウが各方向に独自の間隔を持つようになります。2つのウィンドウを並べて配置すると、中央の間隔が結合されて、必要な2倍の大きさの隙間が生じます。

回避策は、画面とウィンドウの間隔の両方を指定しますが、画面には上と左のマージン、ウィンドウには下と右のマージンのみを使用します。これを行うには、上記のコードを次のように変更します:

 layoutHook = spacingRaw False (Border 10 0 10 0) True (Border 0 10 0 10) True $ Tall 1 (3/100) (1/2) ||| Full

xmonad で xmobar を使う

xmobar は xmonad で使うことを想定して作られた軽量でミニマルなテキストベースのバーです。xmonad で xmobar を使うには、xmonad パッケージに加えて2つのパッケージが必要になります: xmonad-contribxmobar です。また、xmobar パッケージの代わりに xmobar-gitAUR を使うこともできます。

ここでは xmonad の中から xmobar を起動して、xmonad をリロードしたときに xmobar もリロードします。

~/.xmonad/xmonad.hs をお好きなエディタで開いて、以下のどちらかの設定を行なってください:

クイック設定

ノート: xmobar の代わりに dzen2 を使うこともできます。

一般的なインポート:

import XMonad
import XMonad.Hooks.DynamicLog

xmobar を起動して#複雑な設定で説明しているオプションを全て含んだ設定を返す xmobar アクション:

main = xmonad =<< xmobar def { modMask = mod4Mask {- or any other configurations here ... -}}

複雑な設定

xmonad(-contrib) 0.9 現在、XMonad.Hooks.DynamicLog には新しい statusBar 関数が存在します。以下のような設定が可能です:

  • バーを実行するのに使用するコマンド
  • バーに書き込まれるものを決定する PP
  • バーの隙間を切り替えるキーバインド

使用例:

~/.xmonad/xmonad.hs
-- Imports.
import XMonad
import XMonad.Hooks.DynamicLog

-- The main function.
main = xmonad =<< statusBar myBar myPP toggleStrutsKey myConfig

-- Command to launch the bar.
myBar = "xmobar"

-- Custom PP, configure it as you like. It determines what is being written to the bar.
myPP = xmobarPP { ppCurrent = xmobarColor "#429942" "" . wrap "<" ">" }

-- Key binding to toggle the gap for the bar.
toggleStrutsKey XConfig {XMonad.modMask = modMask} = (modMask, xK_b)

-- Main configuration, override the defaults to your liking.
myConfig = def { modMask = mod4Mask }

XMobar の設定を確認

テンプレート・デフォルトの xmobarrc に含まれています。

最後に ~/.xmobarrc を開いて StdinReader がテンプレートに含まれていてプラグインを実行することを確認してください:

~/.xmobarrc
Config { ...
       , commands = [ Run StdinReader .... ]
         ...
       , template = " %StdinReader% ... "
       }

設定が完了したら xmonad を再起動してください。

外部スクリプトで xmonad を制御

複数の方法が存在します:

xdotool key Super+n
  • desktopConfig や EwmhDesktops を設定している場合、使いやすいユーティリティとして wmctrl が存在します。

xmonad の中で他のウィンドウマネージャを起動

xmonad-gitAUR を使用している場合、xmonad の中から他のウィンドウマネージャを再起動することができます (2011年1月現在)。小さなスクリプトを書いて ~/.xmonad/xmonad.hs に設定を追加するだけです。スクリプトは以下のようになります:

~/bin/obtoxmd
#!/bin/sh
openbox
xmonad

そして ~/.xmonad/xmonad.hs に以下のような設定を追加してください:

~/.xmonad/xmonad.hs
import XMonad
--You need to add this import
import XMonad.Util.Replace

main do
    -- And this "replace"
    replace
    xmonad $ def
    {
    --Add the usual here
    }

以下のキーバインドも追加する必要があります:

~/xmonad/xmonad.hs
--Add a keybinding as follows:
((modm .|. shiftMask, xK_o     ), restart "/home/abijr/bin/obtoxmd" True)

カンマを前または後に追加してパスを実際のスクリプトのパスに置き換えてください。Mod+q (xmonad を再起動して設定をリロード) を押してから Mod+Shift+o を押せば xmonad と同じウィンドウが開いた Openbox が実行されます。xmonad に戻したいときは Openbox を終了してください。詳しくは Adamvo の xmonad.hs を参照。

KDE と xmonad

xmonad の wiki には KDE で xmonad を実行 する方法が書かれています。

また、何らかの理由で xmonad が終了してしまったときのために、xmonad を起動するキーボードショートカットを KDE の中で設定しておくと良いでしょう。

plasmashell の無効化

デスクトップやタスクバー、トレイなどを管理する KDE5 の plasmashell を無効化すると良いでしょう:

$ cp /etc/xdg/autostart/plasmashell.desktop ~/.config/autostart/

以下のように ~/.config/autostart/plasmashell.desktop を編集して Exec=plasmashellExec= に置き換えてください:

~/.config/autostart/plasmashell.desktop
[Desktop Entry]
Exec=
Name=Plasma Desktop Workspace
... # more stuff

Skype 用の IM レイアウト

新しいバージョンの Skype 用に IM レイアウトを作成するには、以下のコードを使用:

xmonad.hs
myIMLayout = withIM (1%7) skype Grid
    where
      skype = And (ClassName "Skype") (Role "")

設定例

以下は xmonad ユーザーの設定例です。あなたの設定も自由に追加してください。

トラブルシューティング

Xfce 4 と xmonad

~/.xmonad/xmonad.hsXMonad.Config.Xfce をインポートしたら defaultConfig の代わりに xfceConfig を使ってください:

import XMonad
import XMonad.Config.Xfce

main = xmonad xfceConfig
    { terminal    = "urxvt"
    , modMask     = mod4Mask
    }

また、Settings > Session and Startup > Application Autostart から xmonad --replace を実行するエントリを追加してください。

xmonad-x86_64-linux が存在しない

Xmonad は自動的に xmonad-i386-linux ファイルを (~/.xmonad/ の中に) 作成します。作成されない場合、xmonad wiki から設定を入手するか 自分で 設定を書いてください。.hs などのファイルを ~/.xmonad/ に配置したら、フォルダの中から以下のコマンドを実行:

xmonad --recompile

これでファイルが出来るはずです。

ノート: xmonad-contrib がインストールされていないために xmonad-x86_64-linux が見つからないというエラーメッセージが表示されることもあります。

Java アプリケーションの問題

標準の Java GUI ツールキットは、ハードコーディングされた "non-reparenting" ウィンドウマネージャのリストを持っています。xmonad はそのリストに含まれておらず、稼働中にいくつかの問題が発生する Java アプリケーションがあります。最も一般的な問題の一つは、Java アプリケーションが GUI をレンダリングする代わりに無地で灰色の box をレンダリングする、"gray blobs" です。

これを解決できる方法はいくつかあります。

  • jre7-openjdkjre8-openjdk ならば、 /etc/profile.d/jre.shexport _JAVA_AWT_WM_NONREPARENTING=1 を追記してください。そして、そのファイル /etc/profile.d/jre.sh を source するか、再ログインしてください。
  • Oracle の JRE/JDK ならば、SetWMName を使用してください。しかし、その効果は XMonad.Hooks.EwmhDesktops も使用すると打ち消されてしまうかもしれません。この場合は、
 >> setWMName "LG3D"

LogHook に追記することで解決されるでしょう。

より多くの情報を得るためには、[3] を参照してください。

gvim やターミナルの底部の空きスペース

スペースを背景色と合わせる方法は Vim#gVim ウィンドウの底部の空きスペースを見てください。

rxvt-unicode の場合、rxvt-unicode-patchedAUR が使えます。

サイズヒントを使うように xmonad を設定することもできます。ただし隙間は残ります。詳しくは Xmonad.Layout.LayoutHints のドキュメント を参照してください。

Chromium/Chrome がフルスクリーンにならない

F11 を押したときに Chrome がフルスクリーンにならない場合、xmonad-contrib パッケージに含まれている XMonad.Hooks.EwmhDesktops 拡張を使ってください。~/.xmonad/xmonad.hs に以下の import 文を追加するだけです:

import XMonad.Hooks.EwmhDesktops

それから適当な場所に handleEventHook = fullscreenEventHook を追加してください。例:

...
        xmonad $ defaultConfig
            { modMask            = mod4Mask
            , handleEventHook    = fullscreenEventHook
            }
...

xmonad の再コンパイル・再起動後に、Chromium で F11 (fullscreen) が使えるようになるはずです。

マルチタッチ / touchegg

Touchégg はウィンドウマネージャから _NET_CLIENT_LIST を定期的に取得します (マウスイベントを取得するウィンドウのリストを確認するため)。デフォルトでは xmonad はこのプロパティを提供していません。有効にするには、xmonad-contrib パッケージに含まれている XMonad.Hooks.EwmhDesktops 拡張を使ってください。

azerty キーボードレイアウトのキーバインドの問題

azerty レイアウトのキーボードを使っている場合、特定のキーバインドに問題が発生します。XMonad.Config.Azerty モジュールを使うことで問題は解決します。

GNOME 3 の mod4+p で dmenu が起動するかわりにディスプレイの設定が変更されてしまう

gnome-control-center のディスプレイ設定を切り替える必要がない場合、ユーザーで以下を実行することで xrandr プラグインで Super+p を使用するのを止めさせることができます:

$ dconf write /org/gnome/settings-daemon/plugins/xrandr/active false

Chrome/Chromium で定義されたウィンドウのボーダーの色が表示されない

Chromium および Chrome ブラウザウィンドウには、デフォルトで定義されたボーダーの色はなく、ぼやけた透明なボーダーの色が表示されます。この問題は長い間知られていました が、修正するのは簡単です。 ブラウザのオプションで `Use system title bar and borders` を有効にすると、この問題はすぐに修正されます。

VirtualBox でフォーカスしたボーダーの問題

Virtualbox には既知の問題 (Ticket #6479) が存在し、フォーカスされたウィンドウのボーダーに問題が発生します。xcompmgr などのコンポジットマネージャをインストールして vboxvideo の挙動を上書きすることで解決できます。

Steam のゲーム (Half-Life, Left 4 Dead, ...) と xmonad

Source エンジンを使っているゲーム (Half-Life など) で問題が発生することがあります。ゲームが起動しなかったり黒い画面から進まないときは、ウィンドウモードで起動してみてください: ライブラリのゲームを右クリックして、起動オプションに以下のように入力 ([4] を参照):

-windowed

manage フックを使用してゲームのウィンドウをフロートさせる方法もあります。例えば、Half-Life の場合なら以下の行を使います:

className =? "hl_linux" --> doFloat

LibreOffice - メインウィンドウとダイアログ間のフォーカスフリック

LibreOffice UI は、デスクトップ環境外ではデフォルトで gtk エンジンになります。これにより、一部の xmonad 設定で問題が発生し、LibreOffice メインウィンドウと開いている LibreOffice ダイアログウィンドウの間でフォーカスが急速に移動する可能性があり、アプリケーションを効果的にロックします。この場合、環境変数 SAL_USE_VCLPLUGIN を設定して、LibreOffice#テーマ で説明されているように、LibreOffice に別の UI テーマを明示的に強制的に使用させることができます。

$ export SAL_USE_VCLPLUGIN=gen lowriter

一般 (QT) UI を使用します。

IntelliJ IDEA と xmonad

ダイアログウィンドウ

IntelliJ IDEA では、タイルウィンドウマネージャーのサポートが強化されました。しかし、依然として厄介な問題がいくつかあり、その一部には簡単な解決策があります:

  • マウスポインタがダイアログウィンドウの境界の外に出ると、Find In Files ダイアログウィンドウがすぐに閉じます。これは Find In Files ダイアログウィンドウでのみ発生し、Navigate to... ダイアログウィンドウでは再現できません。"focus follows mouse" ロジックを想定している場合、Find In Files の動作は予期されています。すべてのシステムへのフォーカスが失われると、Find In Files ウィンドウが閉じます。
解決策: ポップアップを 固定 することで変更できます。対応するボタンが右上隅にあります [https://youtrack.jetbrains.com/issue/IDEA-65637#focus=Comments- 27-5142464.0-0】
  • Git コミット間で変更されたファイルを表示すると (aaaa とローカルバージョン bbbb 間の変更 ダイアログを使用)、ファイルレベルの差分を含むウィンドウがダイアログウィンドウの後ろに開きます。
解決策: 不明

アップデート後に共有ライブラリが見つからない

xmonad の実行ファイルは ~/.xmonad/ に存在します。xmonad のアップグレード後、古い実行ファイルが残っている場合、削除することで xmonad は新しい実行ファイルをコンパイルします。もしくは xmonad --recompile を使ってください。

この再コンパイルの作業は、次のように /etc/pacman.d/hooks/xmonad.hook に pacman のフックを作成することで自動化できます (まず hooks デイレクトリを作成する必要があるかもしれません)。

[Trigger]
Operation = Upgrade
Type = Package
Target = xmonad

[Action]
Description = Recompiling xmonad...
When = PostTransaction
Exec = /usr/bin/sudo -u YOUR_USERNAME /usr/bin/xmonad --recompile

YOUR_USERNAME は xmonad を実行するユーザーの名前に置き換えてください。

xmonad --recompile で (XMonad 自体も含む) モジュールが全く認識されない場合、パッケージのデータベースキャッシュを再生成してみてください:

sudo ghc-pkg recache

XMonad.Prompt とウィンドウが壊れているか欠落している

XMonad はデフォルトでフォント -misc-fixed-*-*-*-*-10-*-*-*-*-*-*-* を使用します [5] このフォントが見つからない場合、それらのウィンドウはレンダリングに失敗します。最も簡単な修正は、xorg-fonts-misc をインストールすることです。

参照