Difference between revisions of "Qtile"
(Startup section) |
|||
(12 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
[[Category:Tiling WMs]] | [[Category:Tiling WMs]] | ||
+ | [[ja:Qtile]] | ||
From [http://qtile.org/ Qtile web site]: | From [http://qtile.org/ Qtile web site]: | ||
:''Qtile is a full-featured, hackable tiling window manager written in Python. Qtile is simple, small, and extensible. It's easy to write your own layouts, widgets, and built-in commands.It is written and configured entirely in Python, which means you can leverage the full power and flexibility of the language to make it fit your needs.'' | :''Qtile is a full-featured, hackable tiling window manager written in Python. Qtile is simple, small, and extensible. It's easy to write your own layouts, widgets, and built-in commands.It is written and configured entirely in Python, which means you can leverage the full power and flexibility of the language to make it fit your needs.'' | ||
− | ==Installing== | + | == Installing == |
− | + | Install {{AUR|qtile-git}} from the [[Arch User Repository]] | |
− | A default configuration file is provided | + | A default configuration file is provided in [https://github.com/qtile/qtile/blob/master/libqtile/resources/default_config.py the git repository]. Copy it to {{ic|~/.config/qtile/config.py}} by executing: |
+ | $ mkdir -p ~/.config/qtile/ | ||
+ | $ wget https://raw.github.com/qtile/qtile/develop/libqtile/resources/default_config.py -O - > ~/.config/qtile/config.py | ||
− | + | If this fails execute the commands: | |
− | $ | + | |
− | $ | + | $ rm ~/.config/qtile/config.py |
+ | $ cp /usr/lib/python2.7/site-packages/libqtile/resources/default_config.py ~/.config/qtile/config.py | ||
− | ==Starting Qtile== | + | == Starting Qtile == |
− | To start Qtile add {{ic|exec qtile}} to your {{ic|~/.xinitrc}} and launch Xorg. | + | To start Qtile add {{ic|exec qtile}} to your {{ic|~/.xinitrc}} and launch [[Xorg]]. The default configuration includes the shortcut {{Keypress|Alt+Enter}} to open a new {{ic|xterm}} terminal. |
− | The default configuration includes the shortcut Alt+Enter to open a new xterm terminal. | ||
− | ==Configuration== | + | == Configuration == |
{{Note|This chapter only explains the basics of the configuration of Qtile. For more complete information, look at the [http://docs.qtile.org/en/latest/ official documentation].}} | {{Note|This chapter only explains the basics of the configuration of Qtile. For more complete information, look at the [http://docs.qtile.org/en/latest/ official documentation].}} | ||
− | The configuration is fully done in | + | The configuration is fully done in Python in the file {{ic|~/.config/qtile/config.py}}. For a ''very'' quick introduction to Python, you can read [https://developers.google.com/edu/python/introduction this tutorial]. It will explain Python variables, functions, modules and other things you need to know to quickly get started on configuring Qtile. |
− | Before restarting Qtile you can test your config file for syntax | + | Before restarting Qtile you can test your config file for syntax errors using the command: |
− | $ python2 ~/.config/qtile/config.py | + | $ python2 -m py_compile ~/.config/qtile/config.py |
+ | If the command gives no output, your script is correct. | ||
− | ===Groups=== | + | === Groups === |
− | In Qtile the workspaces (or views) are called Groups. They can be defined as following | + | In Qtile, the workspaces (or views) are called '''Groups'''. They can be defined as following: |
− | < | + | {{bc|<nowiki> |
− | from libqtile. | + | from libqtile.config import Group, Match |
+ | ... | ||
groups = [ | groups = [ | ||
Group("term"), | Group("term"), | ||
− | |||
Group("irc"), | Group("irc"), | ||
− | ] | + | Group("web", match=Match(title=["Firefox"])), |
− | </ | + | ] |
+ | ...</nowiki> | ||
+ | }} | ||
− | ===Keys=== | + | === Keys === |
− | You can configure your shortcuts with the | + | You can configure your shortcuts with the '''Key''' class. |
− | Here is an example of the shortcut Alt+Shift+q to quit the | + | Here is an example of the shortcut {{Keypress|Alt+Shift+q}} to quit the window manager. |
− | < | + | {{bc|<nowiki> |
− | from libqtile. | + | from libqtile.config import Key |
from libqtile.command import lazy | from libqtile.command import lazy | ||
+ | ... | ||
keys = [ | keys = [ | ||
Key( | Key( | ||
− | [" | + | ["mod1", "shift"], "q", |
− | lazy. | + | lazy.shutdow()) |
− | + | ] | |
− | ] | + | ...</nowiki> |
− | </ | + | }} |
− | You can find out which modX corresponds to which key with the command | + | You can find out which {{ic|modX}} corresponds to which key with the command [[Xmodmap]]. |
− | ===Screens and Bars=== | + | === Screens and Bars === |
− | Create one Screen | + | Create one '''Screen''' class for every monitor you have. The bars of Qtile are configured in the '''Screen''' class as in the following example: |
− | < | + | {{bc|<nowiki> |
− | from libqtile. | + | from libqtile.config import Screen |
from libqtile import bar, widget | from libqtile import bar, widget | ||
+ | ... | ||
screens = [ | screens = [ | ||
Screen( | Screen( | ||
− | bottom=bar.Bar([ | + | bottom=bar.Bar([ # add a bar to the bottom of the screen |
− | widget.GroupBox(), | + | widget.GroupBox(), # display the current Group |
− | widget.WindowName() | + | widget.WindowName() # display the name of the window that currently has focus |
], 30)) | ], 30)) | ||
− | ] | + | ] |
− | </ | + | ...</nowiki> |
+ | }} | ||
− | ===Widgets=== | + | === Widgets === |
− | You can find | + | You can find a list of all the built-in widgets in [http://docs.qtile.org/en/latest/manual/ref/widgets.html the official documentation]. |
− | + | If you want to add a widget to your bar, just add it like in the example above (for the {{ic|WindowName}} widget). For example, if we want | |
+ | to add a battery notification, we can use the {{ic|Battery}} widget: | ||
+ | {{bc|<nowiki> | ||
+ | from libqtile.config import Screen | ||
+ | from libqtile import bar, widget | ||
+ | ... | ||
+ | screens = [ | ||
+ | Screen(top=bar.Bar([ | ||
+ | widget.GroupBox(), # display the current Group | ||
+ | widget.Battery() # display the battery state | ||
+ | ], 30)) | ||
+ | ] | ||
+ | ...</nowiki> | ||
+ | }} | ||
− | + | === Startup === | |
+ | You can start up applications using '''hooks''', specifically the {{ic|startup}} hook. For a list of available hooks see [http://docs.qtile.org/en/latest/manual/ref/hooks.html the documentation]. | ||
− | {{ | + | Here is an example where an application starts only once: |
− | + | {{bc|<nowiki> | |
− | |<nowiki> | + | import subprocess, re |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
def is_running(process): | def is_running(process): | ||
s = subprocess.Popen(["ps", "axw"], stdout=subprocess.PIPE) | s = subprocess.Popen(["ps", "axw"], stdout=subprocess.PIPE) | ||
Line 91: | Line 104: | ||
return True | return True | ||
return False | return False | ||
− | |||
def execute_once(process): | def execute_once(process): | ||
if not is_running(process): | if not is_running(process): | ||
− | return Popen( | + | return subprocess.Popen(process.split()) |
− | |||
+ | # start the applications at Qtile startup | ||
@hook.subscribe.startup | @hook.subscribe.startup | ||
def startup(): | def startup(): | ||
Line 103: | Line 115: | ||
execute_once("nm-applet") | execute_once("nm-applet") | ||
execute_once("dropboxd") | execute_once("dropboxd") | ||
− | </ | + | execute_once("feh --bg-scale ~/Pictures/wallpapers.jpg")</nowiki> |
+ | }} | ||
+ | |||
+ | === Sound === | ||
+ | You can add shortcuts to easily control the sound volume and state by [[Users_and_Groups#Group_management|adding a user]] to the '''audio''' group and using the {{ic|alsamixer}} command-line interface. | ||
+ | {{bc|<nowiki> | ||
+ | keys= [ | ||
+ | ... | ||
+ | # Sound | ||
+ | Key([], "XF86AudioMute", lazy.spawn("amixer -q set Master toggle")), | ||
+ | Key([], "XF86AudioLowerVolume", lazy.spawn("amixer -c 0 sset Master 1- unmute")), | ||
+ | Key([], "XF86AudioRaiseVolume", lazy.spawn("amixer -c 0 sset Master 1+ unmute")) | ||
+ | ]</nowiki> | ||
+ | }} | ||
+ | |||
+ | == Debugging == | ||
+ | If you want to locate the source of a problem, you can execute the following line in your terminal: | ||
+ | echo "exec qtile" > /tmp/.start_qtile ; xinit /tmp/.start_qtile -- :2 | ||
− | ==See Also== | + | == See Also == |
* [http://qtile.org/ Qtile website] | * [http://qtile.org/ Qtile website] | ||
* [http://docs.qtile.org/en/latest/ The official documentation] | * [http://docs.qtile.org/en/latest/ The official documentation] | ||
* [[Comparison of Tiling Window Managers]] | * [[Comparison of Tiling Window Managers]] | ||
* [[xinitrc]] | * [[xinitrc]] |
Revision as of 22:26, 2 March 2013
From Qtile web site:
- Qtile is a full-featured, hackable tiling window manager written in Python. Qtile is simple, small, and extensible. It's easy to write your own layouts, widgets, and built-in commands.It is written and configured entirely in Python, which means you can leverage the full power and flexibility of the language to make it fit your needs.
Contents
Installing
Install qtile-gitAUR from the Arch User Repository
A default configuration file is provided in the git repository. Copy it to ~/.config/qtile/config.py
by executing:
$ mkdir -p ~/.config/qtile/ $ wget https://raw.github.com/qtile/qtile/develop/libqtile/resources/default_config.py -O - > ~/.config/qtile/config.py
If this fails execute the commands:
$ rm ~/.config/qtile/config.py $ cp /usr/lib/python2.7/site-packages/libqtile/resources/default_config.py ~/.config/qtile/config.py
Starting Qtile
To start Qtile add exec qtile
to your ~/.xinitrc
and launch Xorg. The default configuration includes the shortcut Template:Keypress to open a new xterm
terminal.
Configuration
The configuration is fully done in Python in the file ~/.config/qtile/config.py
. For a very quick introduction to Python, you can read this tutorial. It will explain Python variables, functions, modules and other things you need to know to quickly get started on configuring Qtile.
Before restarting Qtile you can test your config file for syntax errors using the command:
$ python2 -m py_compile ~/.config/qtile/config.py
If the command gives no output, your script is correct.
Groups
In Qtile, the workspaces (or views) are called Groups. They can be defined as following:
from libqtile.config import Group, Match ... groups = [ Group("term"), Group("irc"), Group("web", match=Match(title=["Firefox"])), ] ...
Keys
You can configure your shortcuts with the Key class. Here is an example of the shortcut Template:Keypress to quit the window manager.
from libqtile.config import Key from libqtile.command import lazy ... keys = [ Key( ["mod1", "shift"], "q", lazy.shutdow()) ] ...
You can find out which modX
corresponds to which key with the command Xmodmap.
Screens and Bars
Create one Screen class for every monitor you have. The bars of Qtile are configured in the Screen class as in the following example:
from libqtile.config import Screen from libqtile import bar, widget ... screens = [ Screen( bottom=bar.Bar([ # add a bar to the bottom of the screen widget.GroupBox(), # display the current Group widget.WindowName() # display the name of the window that currently has focus ], 30)) ] ...
Widgets
You can find a list of all the built-in widgets in the official documentation.
If you want to add a widget to your bar, just add it like in the example above (for the WindowName
widget). For example, if we want
to add a battery notification, we can use the Battery
widget:
from libqtile.config import Screen from libqtile import bar, widget ... screens = [ Screen(top=bar.Bar([ widget.GroupBox(), # display the current Group widget.Battery() # display the battery state ], 30)) ] ...
Startup
You can start up applications using hooks, specifically the startup
hook. For a list of available hooks see the documentation.
Here is an example where an application starts only once:
import subprocess, re def is_running(process): s = subprocess.Popen(["ps", "axw"], stdout=subprocess.PIPE) for x in s.stdout: if re.search(process, x): return True return False def execute_once(process): if not is_running(process): return subprocess.Popen(process.split()) # start the applications at Qtile startup @hook.subscribe.startup def startup(): execute_once("parcellite") execute_once("nm-applet") execute_once("dropboxd") execute_once("feh --bg-scale ~/Pictures/wallpapers.jpg")
Sound
You can add shortcuts to easily control the sound volume and state by adding a user to the audio group and using the alsamixer
command-line interface.
keys= [ ... # Sound Key([], "XF86AudioMute", lazy.spawn("amixer -q set Master toggle")), Key([], "XF86AudioLowerVolume", lazy.spawn("amixer -c 0 sset Master 1- unmute")), Key([], "XF86AudioRaiseVolume", lazy.spawn("amixer -c 0 sset Master 1+ unmute")) ]
Debugging
If you want to locate the source of a problem, you can execute the following line in your terminal:
echo "exec qtile" > /tmp/.start_qtile ; xinit /tmp/.start_qtile -- :2