Project

General

Profile

unexist.dev

subtle

Assorted tidbits and projects

FAQ » History » Version 10

Christoph Kappel, 02/09/2018 11:42 AM

1 1 Christoph Kappel
h1. FAQ
2 1 Christoph Kappel
3 9 Christoph Kappel
{{>toc}}
4 1 Christoph Kappel
5 5 Christoph Kappel
h2. How do I run a Java program?
6 1 Christoph Kappel
7 6 Christoph Kappel
"Java":http://java.com *expects* a certain behaviour (_reparenting of client windows_) of a window manager which is not part of any standard, therefore some "Java":http://java.com programs just show a white canvas.
8 1 Christoph Kappel
9 6 Christoph Kappel
If this happens just try to start your program like this:
10 5 Christoph Kappel
11 6 Christoph Kappel
<pre><code class="shell">AWT_TOOLKIT=MToolkit program</code></pre>
12 6 Christoph Kappel
13 6 Christoph Kappel
This changes the default tookit of "Java":http://java.com to _MToolkit_, which is known to work with non-reparenting windows managers like [[subtle]]. Depending on your "OpenJDK":http://openjdk.java.net version and your architecture this may either lead to a segmentation fault or your "OpenJDK":http://openjdk.java.net just has no support for *MToolkit*. In this case check if your distribution has applied a patch for this issue which allows something like this to change the default behaviour:
14 6 Christoph Kappel
15 6 Christoph Kappel
<pre><code class="shell">_JAVA_AWT_WM_NONREPARENTING=1 program</code></pre>
16 6 Christoph Kappel
17 6 Christoph Kappel
In case both doesn't work there is a third option: "Java":http://java.com seems to use an internally hardcoded list of window managers that are non-reparenting, the "suckless":http://suckless.org guys made a tool ("wmname":http://tools.suckless.org/wmname) to change the name of the wm.
18 6 Christoph Kappel
19 6 Christoph Kappel
Since r2520 [[subtle]] can do that for you, just enable the *&#58;wmname* option.
20 6 Christoph Kappel
21 6 Christoph Kappel
Generally this problem is really long lasting, see here:
22 6 Christoph Kappel
23 6 Christoph Kappel
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6511454
24 6 Christoph Kappel
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=508650
25 6 Christoph Kappel
26 6 Christoph Kappel
bq. Note: Many problems only affect the "JRE":http://www.oracle.com/technetwork/java/javase/downloads/index.html and can be avoided by using the "OpenJDK":http://openjdk.java.net.
27 6 Christoph Kappel
28 6 Christoph Kappel
29 6 Christoph Kappel
30 5 Christoph Kappel
h2. How does subtle match clients?
31 2 Christoph Kappel
32 7 Christoph Kappel
[[subtle]] matches the {{subforge_color(#ff0000, WM_NAME)}} and the {{subforge_color(#0000ff, WM_CLASS)}} property of a window and not the title. This to ensure the match is correct.
33 6 Christoph Kappel
There are several ways to get these values, here are the most common:
34 6 Christoph Kappel
35 7 Christoph Kappel
Select the window with "xprop":http://www.xfree86.org/current/xprop.1.htmland have a look for the {{subforge_color(#ff0000, WM_NAME)}} and {{subforge_color(#0000ff, WM_CLASS)}} lines which usually look like this:
36 6 Christoph Kappel
37 7 Christoph Kappel
<pre><code class="bash">{{subforge_color(#0000ff, WM_NAME)}}(STRING) = "urxvt"
38 7 Christoph Kappel
{{subforge_color(#ff0000, WM_CLASS)}}(STRING) = {{subforge_color(#aa0000, "irssi")}}, {{subforge_color(#ff00ff, "URxvt")}}</code></pre>
39 6 Christoph Kappel
40 6 Christoph Kappel
Run *[[subtler]] -cl* and look for the matching line:
41 6 Christoph Kappel
42 7 Christoph Kappel
<pre><code class="bash">0x800007 * 1 1020x374 2 1 --- {{subforge_color(#ff0000, urxvt)}} ({{subforge_color(#0000ff,URxvt)}})</code></pre>
43 3 Christoph Kappel
44 5 Christoph Kappel
h2. What is required for the volume sublet?
45 2 Christoph Kappel
46 6 Christoph Kappel
The volume [[sublets|sublet]] uses @/dev/mixer@ to set/get the volume levels, which is an older interface introduced with "OSS":http://www.opensound.com/ and still available via "ALSA OSS emulation":http://www.alsa-project.org/. Apparently, newer kernels refuse to autoload that module anymore and you need to load it manually or via any init file.
47 6 Christoph Kappel
48 10 Christoph Kappel
{{subforge_info
49 10 Christoph Kappel
Please check to the docs of your distribution how to do it.
50 10 Christoph Kappel
}}
51 6 Christoph Kappel
52 1 Christoph Kappel
<pre><code>modprobe snd_mixer_oss</code></pre>
53 1 Christoph Kappel
54 10 Christoph Kappel
{{subforge_warn
55 10 Christoph Kappel
Following explanation is technical!
56 10 Christoph Kappel
}}
57 6 Christoph Kappel
58 6 Christoph Kappel
The [[sublets|sublet]] needs a way to access a mixer without any asynchronous callbacks. The reason for that is that [[subtle]] is single-threaded and can't use a dedicated thread to wait for the reply, but the APIs of "ALSA":http://www.alsa-project.org/ and "PulseAudio":http://pulseaudio.org are both designed to be asynchronous. Normally event drivven is fine but it is troublesome when you can't use their mainloop.
59 6 Christoph Kappel
60 5 Christoph Kappel
Since there is no way to add e.g. a control socket to the event main loop of [[subtle]], the @/dev/mixer@ approach is the only way and works for all sound systems.
61 1 Christoph Kappel
62 5 Christoph Kappel
h2. How do I run a program on startup/autostart?
63 3 Christoph Kappel
64 6 Christoph Kappel
Let's say you want "urxvt":http://software.schmorp.de/pkg/rxvt-unicode.html to start after [[subtle]], and for some reason @echo "urxvt" >> ~/.xinitrc@ is just not cutting it. Using the *&#58;start* hook and [[subtlext]] we can simulate autostart like so:
65 6 Christoph Kappel
66 6 Christoph Kappel
<pre>{{hide}}<code class="ruby">
67 6 Christoph Kappel
on :start do
68 6 Christoph Kappel
  Subtlext::Subtle.spawn "urxvt"
69 6 Christoph Kappel
end
70 5 Christoph Kappel
</pre></code>
71 3 Christoph Kappel
72 5 Christoph Kappel
h2. How to match a GLFW window
73 2 Christoph Kappel
74 6 Christoph Kappel
GLFW set the name of the window after the window get created, so you can't match a particular window by his name.
75 6 Christoph Kappel
76 6 Christoph Kappel
to match any GLFW window :
77 6 Christoph Kappel
78 6 Christoph Kappel
<pre>
79 6 Christoph Kappel
tag "glfw" do
80 6 Christoph Kappel
        match name: "GLFW.*"
81 6 Christoph Kappel
        # your code
82 6 Christoph Kappel
end
83 2 Christoph Kappel
</pre>
84 3 Christoph Kappel
85 5 Christoph Kappel
h2. Why does subtle cause to many wakeups?
86 2 Christoph Kappel
87 6 Christoph Kappel
The wakeups are caused by a "Ruby":http://ruby-lang.org internal polling thread that runs every 10ms to schedule/handle other threads and signals. There is currently no way to avoid that in "YARV":http://www.atdot.net/yarv/, although the problem is well known.
88 6 Christoph Kappel
89 6 Christoph Kappel
http://www.ruby-forum.com/topic/200147
90 6 Christoph Kappel
91 1 Christoph Kappel
There is finally some progress regarding this: http://www.ruby-forum.com/topic/549998
92 1 Christoph Kappel
93 1 Christoph Kappel
h2. How can I manually delete a sublet?
94 1 Christoph Kappel
95 1 Christoph Kappel
[[Sublets]] usually consist of a *&#42;.rb* file, a *&#42;.spec* file and one or more icons. All these files can be found in their respective folder in @$XDG_DATA_HOME/subtle@ resp. @~/.local/share/subtle@. After deleting the [[sublets|sublet]] files the cache of [[sur]] needs to be updated or otherwise [[sur]] will think the [[sublets|sublet]] is still installed: @sur update -l@
96 1 Christoph Kappel
97 5 Christoph Kappel
h2. Why does program XYZ appears/turns as/to a gray canvas?
98 3 Christoph Kappel
99 6 Christoph Kappel
Generally, this happens, when a program needs a specific aspect ratio and [[subtle]] sets a gravity that violates this. Windows can tell the window manager about this kind of preferences via their size hints and [[subtle]] can honor those.
100 6 Christoph Kappel
101 6 Christoph Kappel
There are two possible ways:
102 6 Christoph Kappel
103 6 Christoph Kappel
# Enable size hints globally with the _&#58;resize_ option
104 6 Christoph Kappel
  <pre>{{hide}}<code class="ruby">set :resize, true</code></pre>
105 6 Christoph Kappel
# Enable this per program via [[tagging|tag]]
106 6 Christoph Kappel
  <pre>{{hide}}<code class="ruby">tag "name" do
107 6 Christoph Kappel
  match  "name"
108 6 Christoph Kappel
  resize true
109 6 Christoph Kappel
end</code></pre>
110 6 Christoph Kappel
111 2 Christoph Kappel
bq. Note: This can happen with "Java":http://java.com too, see "here":http://subforge.org/ezfaq/show/subtle?faq_id=14 for more information.
112 2 Christoph Kappel
113 5 Christoph Kappel
h2. Where does sur store sublets and icons?
114 2 Christoph Kappel
115 6 Christoph Kappel
[[sur]] follows the "XDG Base Directory specifications":http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html to store data, which includes some base path for specific data types.
116 6 Christoph Kappel
117 6 Christoph Kappel
Following paths are used:
118 6 Christoph Kappel
119 6 Christoph Kappel
|_. Type  |_. XDG path                    |_. Default path                |
120 5 Christoph Kappel
| Sublets
121 1 Christoph Kappel
122 5 Christoph Kappel
@$XDG_DATA_HOME/subtle/sublets@
123 1 Christoph Kappel
124 6 Christoph Kappel
@~/.local/share/subtle/sublets@ |
125 5 Christoph Kappel
| Icons
126 2 Christoph Kappel
127 5 Christoph Kappel
@$XDG_DATA_HOME/subtle(icons@
128 2 Christoph Kappel
129 5 Christoph Kappel
@~/.local/share/subtle/icons@   |
130 2 Christoph Kappel
131 5 Christoph Kappel
h2. What is the difference between ViewSwitch and ViewJump?
132 3 Christoph Kappel
133 6 Christoph Kappel
Boths keys change the [[view]] of the current active [[screens|screen]], but the behavior how they do that depends on if the system consists either of a single [[screens|screen]] or more.
134 5 Christoph Kappel
135 1 Christoph Kappel
136 6 Christoph Kappel
h2. Single screen
137 6 Christoph Kappel
138 6 Christoph Kappel
Here both [[grabs]] do +exactly+ the same.
139 6 Christoph Kappel
140 6 Christoph Kappel
141 6 Christoph Kappel
h2. Multi screen
142 6 Christoph Kappel
143 6 Christoph Kappel
Here the behavior depends on if the selected [[views|view]] is visible on another [[screens|screen]] or not.
144 6 Christoph Kappel
145 6 Christoph Kappel
* *ViewSwitch* either swaps the current [[views|view]] with the selected if it is visible on another [[screens|screen]] or just sets the selected [[views|view]] on current [[screens|screen]].
146 3 Christoph Kappel
* *ViewJump* either focus the selected [[views|view]] if it is visible on another [[screens|screen]] or just sets the select [[views|view]] on current [[screens|screen]].
147 3 Christoph Kappel
148 5 Christoph Kappel
h2. Why don't my grabs work with xyz keyboard layout?
149 2 Christoph Kappel
150 6 Christoph Kappel
Actually, I have no idea why setting the keyboard layout in your @xorg.conf@ isn't suffucient, but apparently you need to call *setxkbmap* in one of your startup files to set the keymap. My suggestion is to use the @~/.xinitrc@, because it is perfectly suited to setup Xorg and usually read.
151 6 Christoph Kappel
152 6 Christoph Kappel
Just add something like this to your @~/.xinitrc@ *before* you start [[subtle]]:
153 6 Christoph Kappel
154 2 Christoph Kappel
<pre><code>setxkbmap -layout 'de(nodeadkeys)'</code></pre>
155 2 Christoph Kappel
156 5 Christoph Kappel
h2. How do I tag console based programs?
157 2 Christoph Kappel
158 6 Christoph Kappel
When console based programs like "irssi":http://irssi.org are started with a terminal like @urxvt -e irssi@, they usually just change the *WM_NAME* of the terminal and per default, [[subtle]] uses both of the *WM_CLASS* values for tagging.
159 6 Christoph Kappel
160 6 Christoph Kappel
The problem about that is, that the [[tagging]] is normally done before the terminal really starts the desired app. To avoid that all better known terminals support the *-name* argument which changes the instance value (first string) of the *WM_CLASS*: @urxvt -name irssi -e irssi@
161 6 Christoph Kappel
162 6 Christoph Kappel
Another problem is that terminals retain their class value (second string) of the *WM_CLASS* and may match other [[tagging|tags]] like:
163 6 Christoph Kappel
164 6 Christoph Kappel
<pre><code class="ruby">tag "terms" do
165 6 Christoph Kappel
  match "urxvt"
166 6 Christoph Kappel
end</code></pre>
167 6 Christoph Kappel
168 6 Christoph Kappel
The common solution to bypass is this to use the :instance matcher, which just matches when for the specific instance value. So the easiest way to reliable match this client is a [[tagging|tag]] like this:
169 6 Christoph Kappel
170 6 Christoph Kappel
<pre><code class="ruby">tag "irssi" do
171 6 Christoph Kappel
  match :instance => "irssi"
172 6 Christoph Kappel
end</code></pre>
173 6 Christoph Kappel
174 6 Christoph Kappel
Following table shows the *WM_NAME* and *WM_CLASS* output of "xprop":http://www.xfree86.org/current/xprop.1.html of the various combinations:
175 6 Christoph Kappel
176 6 Christoph Kappel
|_. Command                  |_. WM_NAME    |_. WM_CLASS   |
177 5 Christoph Kappel
| urxvt
178 2 Christoph Kappel
179 2 Christoph Kappel
urxvt
180 2 Christoph Kappel
181 6 Christoph Kappel
urxvt, URxvt |
182 5 Christoph Kappel
| urxvt -e irssi
183 2 Christoph Kappel
184 5 Christoph Kappel
irssi
185 2 Christoph Kappel
186 6 Christoph Kappel
urxvt, URxvt |
187 5 Christoph Kappel
| urxvt -name irssi
188 2 Christoph Kappel
189 3 Christoph Kappel
urxvt
190 3 Christoph Kappel
191 6 Christoph Kappel
irssi, URxvt |
192 5 Christoph Kappel
| urxvt -name irssi -e irssi
193 3 Christoph Kappel
194 5 Christoph Kappel
irssi
195 3 Christoph Kappel
196 6 Christoph Kappel
irssi, URxvt |
197 5 Christoph Kappel
198 6 Christoph Kappel
Please have a look at the [[Tagging|tagging wiki page]] for more information.
199 5 Christoph Kappel
200 6 Christoph Kappel
201 6 Christoph Kappel
202 6 Christoph Kappel
203 5 Christoph Kappel
h2. How to match a GLFW window
204 2 Christoph Kappel
205 6 Christoph Kappel
GLFW set the windows name after the window get created, so you can't match a particular GLFW window by his name.
206 6 Christoph Kappel
207 6 Christoph Kappel
to match any GLFW window :
208 6 Christoph Kappel
209 6 Christoph Kappel
<pre>
210 6 Christoph Kappel
tag "glfw" do
211 6 Christoph Kappel
        match name: "GLFW.*"
212 6 Christoph Kappel
        # Your code....
213 6 Christoph Kappel
end
214 2 Christoph Kappel
</pre>
215 1 Christoph Kappel
216 5 Christoph Kappel
h2. How do I move a program to another view?
217 1 Christoph Kappel
218 6 Christoph Kappel
Placement in [[subtle]] is +strict+ and completely done via [[tagging]]. There are many ways to change [[tagging|tags]] per runtime, common is to use either [[subtler]] or [[subtlext]].
219 5 Christoph Kappel
220 2 Christoph Kappel
221 6 Christoph Kappel
h2. subtler
222 5 Christoph Kappel
223 6 Christoph Kappel
[[subtler]] can be used on the commandline:
224 5 Christoph Kappel
225 6 Christoph Kappel
<pre>{{hide}}<code class="ruby">
226 6 Christoph Kappel
subtler -ta tag         #< Add new tag 'tag'
227 6 Christoph Kappel
subtler -cT client tag  #< Tag client 'client' with tag 'tag'
228 6 Christoph Kappel
subtler -vT view tag    #< Tag view 'view' with tag 'tag'
229 6 Christoph Kappel
</code></pre>
230 5 Christoph Kappel
231 1 Christoph Kappel
232 6 Christoph Kappel
h2. subtlext
233 5 Christoph Kappel
234 6 Christoph Kappel
[[subtlext]] requires basic "ruby":http://ruby-lang.org knowledge:
235 6 Christoph Kappel
236 6 Christoph Kappel
<pre>{{hide}}<code class="ruby">require "subtle/subtlext"
237 6 Christoph Kappel
238 6 Christoph Kappel
tag = Subtlext::Tag.new("tag").save  #< Add new tag 'tag'
239 6 Christoph Kappel
Subtlext::Client["client"] + "tag"   #< Tag client 'client' with tag 'tag'
240 6 Christoph Kappel
Subtlext::View["view"] + "tag"       #< Tag view 'view' with tag 'tag'
241 6 Christoph Kappel
</code></pre>
242 6 Christoph Kappel
243 6 Christoph Kappel
244 6 Christoph Kappel
h2. Snippets
245 6 Christoph Kappel
246 6 Christoph Kappel
The [[snippets]] wiki page includes examples how to [[snippets#Move-windows|move to another view]].
247 6 Christoph Kappel
248 6 Christoph Kappel
249 6 Christoph Kappel
h2. Contrib
250 6 Christoph Kappel
251 6 Christoph Kappel
h3. Vitag
252 6 Christoph Kappel
253 6 Christoph Kappel
"subtle-contrib":http://subforge.org/projects/subtle-contrib/wiki contains [[subtle-contrib:vitag|vitag]] a script to change the [[tagging|tags]] of windows and views with an editor.
254 6 Christoph Kappel
255 6 Christoph Kappel
h3. Launcher
256 6 Christoph Kappel
257 6 Christoph Kappel
The "launcher":http://subforge.org/projects/subtle-contrib/wiki#Launcher uses quite the opposite way, instead of moving a window to a certain screen it just provides a way to launch a window directly on the right view with the correct [[tagging|tags]].
258 6 Christoph Kappel
259 6 Christoph Kappel
260 6 Christoph Kappel
h2. Stick
261 6 Christoph Kappel
262 6 Christoph Kappel
Most of the time, setting the window to *stick* does the trick too. Stick just displays the window on all views until the mode is disabled again. This can be done with [[grabs]] (default keys: *W-s*) or with [[subtler]]. (click on the window: @subtler -cXS@)
263 6 Christoph Kappel
264 6 Christoph Kappel
265 6 Christoph Kappel
266 5 Christoph Kappel
h2. How do I tag gimp?
267 2 Christoph Kappel
268 6 Christoph Kappel
[[Tagging]] "GIMP":http://gimp.org can be nasty, because the current version (2.6) uses inconsistent window names and roles. The window roles are fixed in the current development snapshot and will hopefully find their way into the 2.8 release.
269 6 Christoph Kappel
270 2 Christoph Kappel
https://bugzilla.gnome.org/show_bug.cgi?id=645456
271 2 Christoph Kappel
272 5 Christoph Kappel
h2. How do I (auto)start programs?
273 2 Christoph Kappel
274 6 Christoph Kappel
There are several way how to start a certain programm, here are the most common:
275 5 Christoph Kappel
276 6 Christoph Kappel
* Start your program via your $HOME/.xinitrc:
277 5 Christoph Kappel
278 6 Christoph Kappel
<pre><code class="ruby">
279 6 Christoph Kappel
subtle &
280 6 Christoph Kappel
PID=$!
281 6 Christoph Kappel
sleep 2
282 6 Christoph Kappel
urxvt
283 6 Christoph Kappel
wait $PID
284 6 Christoph Kappel
</code></pre>
285 6 Christoph Kappel
286 6 Christoph Kappel
* Start your program via [[grabs]]:
287 6 Christoph Kappel
288 6 Christoph Kappel
<pre><code class="ruby">
289 6 Christoph Kappel
"A-x" => "urxvt"
290 6 Christoph Kappel
</code></pre>
291 6 Christoph Kappel
292 6 Christoph Kappel
There are many launchers available like "dmenu":http://tools.suckless.org/dmenu and there is even a launcher especially designed for [[subtle]], you can find it in [[subtle-contrib:Launcher|here]].
293 6 Christoph Kappel
294 6 Christoph Kappel
295 5 Christoph Kappel
h2. Where is the output window of flash in fullscreen?
296 2 Christoph Kappel
297 6 Christoph Kappel
For flash, browsers seem to use window instance and class names that doesn't match the browser values. Therefore the windows will usually appear on the default view.
298 6 Christoph Kappel
299 6 Christoph Kappel
Following names are currently in use:
300 6 Christoph Kappel
301 6 Christoph Kappel
|_. Browser       |_. Arch   |_. WM_NAME            |_. WM_CLASS                                 |
302 5 Christoph Kappel
| Firefox <7.0.1
303 2 Christoph Kappel
304 5 Christoph Kappel
all
305 3 Christoph Kappel
306 5 Christoph Kappel
<unknown>
307 2 Christoph Kappel
308 6 Christoph Kappel
"<unknown>", "<unknown>"                   |
309 5 Christoph Kappel
| Firefox >=7.0.1
310 2 Christoph Kappel
311 5 Christoph Kappel
all
312 2 Christoph Kappel
313 5 Christoph Kappel
plugin-container
314 2 Christoph Kappel
315 6 Christoph Kappel
"plugin-container", "Plugin-container"     |
316 5 Christoph Kappel
| Chromium
317 2 Christoph Kappel
318 5 Christoph Kappel
all
319 3 Christoph Kappel
320 5 Christoph Kappel
exe
321 2 Christoph Kappel
322 6 Christoph Kappel
"exe", "Exe"                               |
323 5 Christoph Kappel
| Opera
324 2 Christoph Kappel
325 5 Christoph Kappel
x86
326 1 Christoph Kappel
327 5 Christoph Kappel
"operapluginwrapper"
328 1 Christoph Kappel
329 6 Christoph Kappel
"operapluginwrapper", "Operapluginwrapper" |
330 5 Christoph Kappel
| nspluginwrapper
331 2 Christoph Kappel
332 5 Christoph Kappel
x86_64
333 3 Christoph Kappel
334 5 Christoph Kappel
"npviewer.bin"
335 2 Christoph Kappel
336 6 Christoph Kappel
"Npviewer.bin"                             |
337 6 Christoph Kappel
338 6 Christoph Kappel
The easiest way to avoid that is to add a [[tagging|tag]] that makes these windows sticky:
339 6 Christoph Kappel
340 6 Christoph Kappel
<pre>{{hide}}<code class="ruby">tag "flash" do
341 6 Christoph Kappel
  match "<unknown>|plugin-container|exe|operapluginwrapper|npviewer.bin"
342 6 Christoph Kappel
  stick true
343 2 Christoph Kappel
end</code></pre>
344 2 Christoph Kappel
345 5 Christoph Kappel
h2. How can I use subtle without numpad?
346 2 Christoph Kappel
347 6 Christoph Kappel
Per default [[subtle]] uses the numpad, because it's easier to remind the different postions when you can see them. Generally this is just a suggestion, it's up to you to change the grabs to your needs - any keys will work.
348 6 Christoph Kappel
349 6 Christoph Kappel
Keys that also have proven to work well are *q-w-e*, *a-s-d* and *y-x-c*:
350 6 Christoph Kappel
351 6 Christoph Kappel
<pre>{{hide}}<code class="ruby">grab "W-q", [ :top_left,     :top_left66,     :top_left33     ]
352 6 Christoph Kappel
grab "W-w", [ :top,          :top66,          :top33          ]
353 6 Christoph Kappel
grab "W-e", [ :top_right,    :top_right66,    :top_right33    ]
354 6 Christoph Kappel
grab "W-a", [ :left,         :left66,         :left33         ]
355 6 Christoph Kappel
grab "W-s", [ :center,       :center66,       :center33       ]
356 6 Christoph Kappel
grab "W-d", [ :right,        :right66,        :right33        ]
357 6 Christoph Kappel
358 6 Christoph Kappel
# QWERTZ
359 6 Christoph Kappel
grab "W-y", [ :bottom_left,  :bottom_left66,  :bottom_left33  ]
360 6 Christoph Kappel
361 6 Christoph Kappel
# QWERTY
362 6 Christoph Kappel
grab "W-z", [ :bottom_left,  :bottom_left66,  :bottom_left33  ]
363 6 Christoph Kappel
364 6 Christoph Kappel
grab "W-x", [ :bottom,       :bottom66,       :bottom33       ]
365 6 Christoph Kappel
grab "W-c", [ :bottom_right, :bottom_right66, :bottom_right33 ]
366 6 Christoph Kappel
</code></pre>
367 6 Christoph Kappel
368 6 Christoph Kappel
369 2 Christoph Kappel
You can find more about assigning keys [[Grabs|here]].
370 2 Christoph Kappel
371 5 Christoph Kappel
h2. How do I set a wallpaper in subtle?
372 2 Christoph Kappel
373 6 Christoph Kappel
On start, [[subtle]] sets a background color (_if set_) to the root window and therefore *overwrites* any root pixmap set before. To avoid this, you just need to comment out the *&#58;background* line from your config.
374 6 Christoph Kappel
375 6 Christoph Kappel
[[subtle]] itself has no and will never have either an autostart or way to set a wallpaper directly. Normally you just want to setup your X session and and not [[subtle]]. Your _~/.xinitrc_ is the right place for stuff like this.
376 6 Christoph Kappel
377 5 Christoph Kappel
A background can easily set with a tool like "feh":http://linuxbrit.co.uk/software/feh/.
378 2 Christoph Kappel
379 5 Christoph Kappel
h2. Is subtle a reparenting window manager?
380 2 Christoph Kappel
381 6 Christoph Kappel
*Nope*, [[subtle]] doesn't reparent windows and there is in fact *no* reason to do that. The layout in [[subtle]] is a really loose set, the only relation between a [[views|view]] and a [[client]] is [[tagging]] and this is checked on every [[views|view]] update.
382 6 Christoph Kappel
383 6 Christoph Kappel
Reparenting windows would require following additional steps, when a window is visible on a certain [[views|view]]:
384 6 Christoph Kappel
385 6 Christoph Kappel
# Resize the [[views|view]] toplevel window to the size of the current [[screen]]
386 6 Christoph Kappel
# Reparent the [[client]] window to the toplevel window
387 6 Christoph Kappel
# Handle (ignore here) the generated expose and crossing events
388 6 Christoph Kappel
389 6 Christoph Kappel
Probably sounds like not much overhead, but keep in mind this is just required because the developer of "Java":http://www.java.com/ and "Qt":http://qt.nokia.com/products/ cannot understand following line from the "ICCCM":http://tronche.com/gui/x/icccm/sec-4.html#s-4.2.1:
390 6 Christoph Kappel
391 2 Christoph Kappel
bq. Clients must be aware that some window managers will reparent their top-level windows so that a window that was created as a child of the root will be displayed as a child of some window belonging to the window manager
392 2 Christoph Kappel
393 5 Christoph Kappel
h2. Is there any log file?
394 2 Christoph Kappel
395 5 Christoph Kappel
Nope, there is *no* log file. In case you need one for e.g. reporting a bug +please+ read to the [[bugs|reporting a bug]] wiki page and check the paragraph about [[bugs#enable-logging|logging]].