https://wiki.archlinux.org/api.php?action=feedcontributions&user=Bharanideepan&feedformat=atomArchWiki - User contributions [en]2024-03-29T07:38:34ZUser contributionsMediaWiki 1.41.0https://wiki.archlinux.org/index.php?title=Laptop/Lenovo&diff=414958Laptop/Lenovo2016-01-11T17:49:13Z<p>Bharanideepan: /* B series */</p>
<hr />
<div>[[Category:Lenovo]]<br />
{{Laptops navigation}}<br />
<br><br />
== IBM/Lenovo ==<br />
<br />
=== ThinkPad ===<br />
<br />
==== 300 series ====<br />
<br />
{{HCL/Laptops table header}}<br />
| IBM ThinkPad 380ED || NA|| NA || NA || NA || No || NA || NA || NA || ||<br />
|-<br />
|}<br />
<br />
==== Edge series ====<br />
<br />
{{HCL/Laptops table header}}<br />
| [[Lenovo ThinkPad Edge E330]] || NA || Yes || Yes || Yes || Yes || Yes || Yes || NA || ||<br />
|-<br />
| [[Lenovo ThinkPad Edge E335]] || NA || Yes || Yes || Yes || Yes || NA || Yes || NA || ||<br />
|-<br />
| Lenovo ThinkPad Edge E420s || Yes || Yes || Yes || Yes || Not tested || Yes || NA || NA || SDcard (Yes), Webcam (Yes), Trackpoint (No) || ||<br />
|-<br />
| [[Lenovo ThinkPad Edge E430]] || Yes || Yes || Yes* || Yes* || Not tested || Yes || NA || NA || SD card (yes) || ||<br />
|-<br />
| [[Lenovo Thinkpad Edge E455]] || 2015.04.01 || Yes* || Yes || Yes || Yes || Yes || Yes || NA || ||<br />
|-<br />
| Lenovo ThinkPad Edge E530 || Yes || Yes || Yes* || Yes* || Yes || Yes || NA || NA || SD card (yes), Finger Print (not tested) || ||<br />
|-<br />
| Lenovo ThinkPad Edge E540 || 2015.08.01 || Yes || Yes || Yes || Yes || Yes || Yes* || NA || SD card (yes), Finger Print (yes), touch pad and trackpoint (yes), Webcam (yes) || ||<br />
|-<br />
|}<br />
<br />
==== L series ====<br />
<br />
{{HCL/Laptops table header}}<br />
| Lenovo ThinkPad L420 || Yes || Yes || Yes || Yes || Yes || Not tested || Yes || NA || ||<br />
|-<br />
| Lenovo ThinkPad L430 || Yes || Yes || Yes || Yes || Yes || Yes || Yes || NA || Trackpoint* ||<br />
|-<br />
| Lenovo ThinkPad L530 || Yes || Yes || Yes || Yes || Yes || Yes || Yes || NA || Trackpoint*, Fingerprint reader ||<br />
|-<br />
|}<br />
<br />
==== R series ====<br />
{{HCL/Laptops table header}}<br />
| IBM ThinkPad R50 || Yes || Yes || Yes || Yes || NA || Yes || Yes || Infrared* || ||<br />
|-<br />
| IBM ThinkPad R52 || Yes || Yes || Yes || Yes || NA || Yes || Yes || Infrared* || ||<br />
|-<br />
| Lenovo ThinkPad R60 || Yes || Yes || Yes || Yes || Yes || Yes || NA || NA || ||<br />
|-<br />
|}<br />
<br />
==== T series ====<br />
<br />
{{HCL/Laptops table header}}<br />
| [[IBM ThinkPad T21]] || Yes* || Yes || Yes || NA || NA || Yes* || NA || NA || See below ||<br />
|-<br />
| [[IBM ThinkPad T23]] || Yes || Yes || Yes || NA || NA || Yes || NA || NA || ||<br />
|-<br />
| [[IBM ThinkPad T42]] || Yes || Yes || Yes || Yes || NA || Yes || NA || NA || ||<br />
|-<br />
| IBM ThinkPad T60 || Yes || Yes || Yes || Yes || Yes || Yes || ? || NA || ||<br />
|-<br />
| IBM ThinkPad T60p || Yes || Yes || Yes || Yes || Yes || Yes || ? || NA || ThinkFinger ||<br />
|-<br />
| [[IBM ThinkPad T61]] || Yes || Yes || Yes || Yes || Yes || Yes || NA || || ||<br />
|-<br />
| IBM ThinkPad T61p || Yes || Yes || Yes || Yes || Yes || Yes || NA || || ||<br />
|-<br />
| [[Lenovo ThinkPad T400]] || Yes || Yes || Yes || Yes || Yes || Yes || NA || NA || ||<br />
|-<br />
| [[Lenovo ThinkPad T400s]] || Yes || Yes || Yes || Yes || Yes || Yes || NA || NA || ||<br />
|-<br />
| [[Lenovo ThinkPad T410]] || Yes || Yes || Yes || Yes || Yes || Yes || NA || NA || ||<br />
|-<br />
| [[Lenovo ThinkPad T420]] || Yes || Yes || Yes || Yes || Yes || Yes || Yes || NA || Card reader tested, no Fingerprint scanner||<br />
|-<br />
| [[Lenovo ThinkPad T420s]] || Yes || Yes || Yes || Yes || Yes || Yes || NA || NA || Card Reader ||<br />
|-<br />
| [[Lenovo ThinkPad T430]] || Yes || Yes || Yes || Yes || Yes || Yes* || Yes* || Not tested || ||<br />
|-<br />
| [[#Lenovo_ThinkPad_T440p|Lenovo ThinkPad T440p]] || Yes || Yes || Yes || Yes || Yes || Yes* || NA || NA || Card Reader || See below<br />
|-<br />
| [[Lenovo ThinkPad T440s]] || Yes || Yes || Yes || Yes || Yes* || ? || Yes || ? || || See wiki page for more details about wireless<br />
|-<br />
| [[Lenovo ThinkPad T450s]] || 2015.10.01 || Yes || Yes || Yes || Yes || Yes || ? || NA || SD Card reader; fingerprint scanner|| <br />
|-<br />
| Lenovo ThinkPad T500 || Yes || Yes || Yes || Yes || Yes || Yes || NA || NA || ||<br />
|-<br />
| [[Lenovo ThinkPad T520]] || Yes || Yes || Yes || Yes || Yes || Yes || NA || NA || ||<br />
|-<br />
| [[Lenovo ThinkPad T530]] || Yes || Yes || Yes || Yes || Yes || Yes || Yes || NA || ||<br />
|-<br />
| [[Lenovo ThinkPad T550]] || Yes || Yes || Yes || Yes || Yes || Yes || Yes || NA || DisplayPort ||<br />
|-<br />
|}<br />
<br />
==== X series ====<br />
<br />
{{HCL/Laptops table header}}<br />
| IBM ThinkPad X23 || Yes || Yes || Yes || NA || NA || Yes || NA || NA || ||<br />
|-<br />
| [[IBM ThinkPad X60s]] || Yes|| Yes || Yes || Yes || Yes || Yes || NA || NA || ||<br />
|-<br />
| Lenovo ThinkPad X61s || Yes || Yes || Yes || Yes || Yes || Yes || Yes || NA || SD slot ||<br />
|-<br />
| [[Lenovo ThinkPad X100e]] || Yes|| Yes || Yes || Yes || Yes || Yes || Not tested || NA || SD card (Yes), Webcam (Yes) ||<br />
|-<br />
| [[Lenovo ThinkPad X200]] || Yes || Yes || Yes || Yes || Yes || Yes || NA || NA || ||<br />
|-<br />
| [[Lenovo ThinkPad X201]] || Yes || Yes || Yes || Yes || Yes || Yes || Yes || Not tested || ||<br />
|-<br />
| Lenovo ThinkPad X1 Carbon 3rd || NA || Yes || Yes || Yes || Yes || NA || Yes || NA || ||<br />
|-<br />
|}<br />
<br />
== Lenovo ==<br />
<br />
=== IdeaPad ===<br />
<br />
{{HCL/Laptops table header}}<br />
| [[Lenovo IdeaPad Flex 10]] || Yes || Yes* || Yes || NA || Yes || Yes || Yes || NA || Touchscreen* ||<br />
|-<br />
| [[Lenovo IdeaPad S10]] || Yes || Yes || Yes || Yes || Yes || Yes || NA || NA || ||<br />
|-<br />
| [[Lenovo IdeaPad S400 Touch]] || Yes || Yes || Yes || Yes || Yes || Yes || Not tested || NA || ||<br />
|-<br />
| Lenovo IdeaPad U430p || Yes || Yes || Yes || Yes || Yes || Yes || Not tested || NA || ||<br />
|-<br />
| Lenovo IdeaPad Y700 || 2015.12.01 || Yes || Yes || Yes || Yes || Yes || Not tested || NA || ||<br />
|-<br />
|}<br />
<br />
=== B series ===<br />
<br />
{{HCL/Laptops table header}}<br />
| Lenovo B50 || NA || Yes || Yes || Yes || Yes || Not tested || Not tested || Not tested || ||<br />
|-<br />
| Lenovo B50-70 || Yes || Yes* ||Yes || Yes || Yes || Yes || Not tested || NA || See below* ||<br />
|-<br />
|}<br />
<br />
=== K series ===<br />
<br />
{{HCL/Laptops table header}}<br />
| Lenovo K450e || NA || Yes || Yes || Yes || Yes || Not tested || Yes || Not tested || ||<br />
|-<br />
|}<br />
<br />
=== N series ===<br />
<br />
{{HCL/Laptops table header}}<br />
| Lenovo N200 (3000) || Yes || Yes* || Yes || Yes || Yes || Yes* || NA || NA || See below ||<br />
|-<br />
|}<br />
<br />
=== S series ===<br />
<br />
{{HCL/Laptops table header}}<br />
| Lenovo S21e-20 || 2015.07.01 || Yes || Yes || NA || Yes* || ? || Yes || NA || SD Card (Yes), USB 3.0 (Yes), HDMI Out (?), Touchpad (Yes*) ||<br />
|-<br />
|}<br />
<br />
=== U Series ===<br />
<br />
{{HCL/Laptops table header}}<br />
| Lenovo U31-70 || 2015.10.01 || Yes || Yes || Yes || Yes* || Yes || Yes || NA || SD Card (Yes), USB 3.0 (Yes), HDMI Out (Yes), Touchpad (Yes), Webcam (Yes) ||<br />
|-<br />
|}<br />
<br />
== Special Notes (*): ==<br />
<br />
{{Accuracy|Lots of vague or unproven bugs/workarounds, poor writing}}<br />
<br />
=== Lenovo U31-70 ===<br />
Wireless needs {{Pkg|linux}} >= 4.3 and latest {{Pkg|linux-firmware}}, both packages are currently in testing. Copy one of the firmware blobs {{ic|eeprom_ar6320_2p1_NFA345i.bin}} or {{ic|eeprom_ar6320_2p1_NFA345i_highTX.bin}} from the windows driver to {{ic|/usr/lib/firmware/ath10k/QCA6174/hw2.1/board-pci-168c:0041:17aa:3545.bin}}.<br />
<br />
=== Lenovo B50-70 ===<br />
* UEFI:<br />
** to be able to disable Secure Boot (necessary for dual boot, not needed for Linux only), you have to switch from "UEFI first" to "UEFI only" (or something like this) in UEFI setup menu; the Secure Boot option appears then on the Security tab<br />
** after UEFI update having Linux and Windows installed, the Linux bootloader ceased to be the default one, UEFI started to load Windows by default and it was impossible to select the Linux one in the UEFI boot menu and in the UEFI setup - reinstalling the bootloader helped; having no access to a boot media that supports UEFI, a solution might be also replacing the Windows EFI bootloader file with a Linux one temporalily, in order to be able to boot Linux from HDD<br />
** for the UEFI update, a Windows OS is needed<br />
* Touchpad:<br />
** Synaptics - works after installing Synaptics drivers from repo, possible to change behaviour (like reaction for double tap) according to your wish<br />
* Video:<br />
** in laptops with dual video card (Intel and ATI) - detects both, Intel is active as a default, not checked if it's possible at all to switch between them<br />
<br />
==== Operation with a HDD caddy ====<br />
When you install an SSD in the place of the plate HDD drive and you want to have your HDD still inside the laptop, it is possible to install it in the place of the optical drive in a special "HDD caddy". The optical drive is of 9 mm height, but a 9,5 mm caddy (ultra slim) fits in the slot. A caddy with a SATA interface is needed. It is difficult to separate the front bezel from the original optical drive (and opening its case does not help, but brings a danger of making a mess in the opening mechanism; the only option is just to pull the bezel using a bit of force, but you risk breaking the latches).<br />
<br />
While the HDD installed instead of the optical drive operates flawlessly in Windows, it wasn't going to work out of the box in Linux, at least in one case. The kernel tries to establish a connection with the disk, but fails to do it (''SATA link down'' entry in /var/log/messages). The solution is to force a 1.5 Gbps transfer speed (instead of 6 Gbps) by adding a ''libata.force='' kernel parameter. See [https://www.kernel.org/doc/Documentation/kernel-parameters.txt] for details.<br />
<br />
=== Lenovo K450e ===<br />
<br />
After installing Arch Linux and booting, a single beep may be heard. To disable this beep, press F1 during startup, then change Boot Priority to 'UEFI First', as well as enabling 'CSM'.<br />
<br />
=== ThinkPad X1 Carbon 3rd ===<br />
<br />
* http://natalian.org/archives/2015/02/18/Archlinux_on_a_Lenovo_X1C3/<br />
<br />
=== IBM ThinkPad T21 ===<br />
<br />
* Video: <br />
** Incapable of running DRM at 1024x768 and 24-bit color due to 8 MB VRAM. Must drop color or resolution to get DRM.<br />
** For whatever reason, external VGA output (for an external monitor) was disabled. This was fixed by doing this:<br />
*** {{ic|echo 1 > /proc/acpi/video/VID/DOS}}<br />
<br />
=== Lenovo 3000 N200 ===<br />
<br />
* Sound:<br />
** You may have to append <code>options snd_hda_intel model=lenovo</code> to <code>/etc/modprobe.d/modprobe.conf</code> for sound to work.<br />
<br />
=== IBM ThinkPad R52 ===<br />
<br />
* USB network tethering<br />
** Inbound networking via interface ''usb0'' works.<br />
<br />
=== Lenovo ThinkPad T430 ===<br />
<br />
* The volume mute works fine, but the led is simply toggled by the press. No relation to the actual mute state. (aka. if you start with the system muted and the led off, pressing it will unmute the volume, but turn on the led).<br />
* The microphone mute button works, but the led stays lit permanently.<br />
* Bluetooth (0a5c:21e6 Broadcom Corp. BCM20702 Bluetooth 4.0 [ThinkPad]) appears to be functional, even during standby or hibernation.<br />
<br />
=== Lenovo ThinkPad T440p ===<br />
<br />
* ClickPad: the whole trackpad clicks, and disabling the trackpad using synclient makes the trackpoint essentially unusable.<br />
** See [http://who-t.blogspot.com.au/2014/03/xorg-synaptics-support-for-lenovo-t440.html this article] and [http://who-t.blogspot.com.au/2013/12/lenovo-t440-touchpad-button.html previous version].<br />
** Install {{AUR|xf86-input-synlx40}}{{Broken package link|{{aur-mirror|xf86-input-synlx40}}}} and {{AUR|xf86-input-mtrack}} for alternative drivers.<br />
* Audio:<br />
** HDMI audio is the default audio output device. Consult the [[ALSA]] page for details on changing the default.<br />
** As the X100e/Mini10, it's possible to mute the headset and speaker outputs separately to the master. Muting the speaker output improves bass output on the headset port.<br />
** If the system fails to wake from sleep, it can lose sync with the internal audio card and speakers/headphones may fail to work. In this case, put the system to sleep, and wake it again and audio functionality should be restored. <br />
* The fingerprint sensor is a Validity VFS5011, which requires [https://github.com/abbradar/fprint_vfs5011 a patched fprintd] and is apparently highly unreliable.<br />
* thinkpad_acpi:<br />
** Controlling the Fn-Lock, Mute, Mic Mute or 'glowing I' LEDs is apparently not possible.<br />
** fan control does not seem to work.<br />
* Graphics and Video:<br />
** With the integrated GPU, [[xrandr]] can crash while attaching or detaching displays connected via the dock.<br />
** The built-in miniDisplayPort will sometimes spew I²C issues into the kernel log.<br />
** [[VA-API]] is highly recommended as it performs significantly better than CPU decoding of large media files.<br />
** '''The BIOS should not be upgraded past version 1.14, as newer BIOSes cause memory corruption when used with Bumblebee.''' See [https://github.com/Bumblebee-Project/bbswitch/issues/78#issuecomment-42741698 Bumblebee GitHub]<br />
* Connectivity:<br />
** Bluetooth is ''extremely'' fragile. The controller works fine most of the time, but can cause the system to wedge totally on sleep/wake cycles, especially if a connection was active at sleep. Disable the controller using {{ic|bluetoothctl}} before sleeping.<br />
<br />
=== Lenovo S21e-20 ===<br />
* Tested with {{aur|broadcom-wl-dkms}} 802.11 wireless driver<br />
* Synaptics touchpad required 3 patches to {{Pkg|linux}}:drivers/hid/hid-rmi.c on 2015-07-26 ([https://bugs.freedesktop.org/show_bug.cgi?id=91102 bug report], [https://github.com/harisokanovic/archlinux-packages/commit/f4550c211ca7809ecf926f8074c7b7250a74bd92 kernel recipe patch]). The current 4.3 kernel includes these patches. You will also need to install the xf86_64-input-synaptics package([https://www.archlinux.org/packages/?name=xf86-input-synaptics]) <br />
<br />
==== tpacpi-bat ====<br />
<br />
There is an issue with tpacpi-bat not reporting the right value for the stop threshold. This seems to be related to a buggy BIOS and can not be fixed application wise. <br />
<br />
See https://github.com/teleshoes/tpacpi-bat/issues/44<br />
<br />
== See also ==<br />
* [http://www.thinkwiki.org/wiki Think wiki]</div>Bharanideepanhttps://wiki.archlinux.org/index.php?title=Dmenu&diff=134934Dmenu2011-03-26T16:16:26Z<p>Bharanideepan: Added link to dmenu hacking thread in the forums.</p>
<hr />
<div>[[Category:Utilities (English)]]<br />
[[Category:HOWTOs (English)]]<br />
{{i18n|dmenu}} {{DISPLAYTITLE:dmenu}}<br />
<br />
== Introduction ==<br />
<br />
[http://www.suckless.org/programs/dmenu.html dmenu] is a fast and lightweight dynamic menu for X. It reads arbitrary text from stdin, and creates a menu with one item for each line. The user can then select an item, through the arrow keys or typing a part of the name, and the line is printed to stdout. dmenu_run is a wrapper that ships with the dmenu distribution that allows its use as an application launcher.<br />
<br />
== Installation ==<br />
<br />
Installing dmenu is simple:<br />
# pacman -S dmenu<br />
<br />
run it<br />
$ dmenu_run<br />
<br />
== Configuration ==<br />
Now, you will want to attach the '''dmenu_run''' command to a keystroke combination. This can be done either via your window manager or desktop environment configuration, or with a program like xbindkeys. See the [[Hotkeys]] article for more information.<br />
<br />
== External Resources ==<br />
* [http://tools.suckless.org/dmenu dmenu] &ndash; The official dmenu website<br />
* [http://dmwit.com/yeganesh Yeganesh] &ndash; a light wrapper that reorders commands based on popularity<br />
* [http://aur.archlinux.org/packages.php?ID=33379 dmenu-launch (AUR)] &ndash; A simple Dmenu-based application launcher. Launches binaries and XDG shortcuts.<br />
* [https://bbs.archlinux.org/viewtopic.php?id=80145 Dmenu Hacking thread ] &ndash; Dmenu hacking thread in arch linux forums.</div>Bharanideepanhttps://wiki.archlinux.org/index.php?title=Dropbox&diff=125596Dropbox2010-12-19T10:50:41Z<p>Bharanideepan: /* Without Nautilus (Another Way) */ Changed the argument passed to thunar from $@ to $2 , since thunar wont start since the argument --no-desktop is unknown.</p>
<hr />
<div>[[Category:HOWTOs (English)]]<br />
[https://www.dropbox.com Dropbox] is a file sharing system that recently introduced a GNU/Linux client. Use it to transparently sync files across computers and architectures. Simply drop files into your "~/Dropbox" folder, and they will automatically sync to your centralized repository.<br />
<br />
==Installation==<br />
<br />
[http://aur.archlinux.org/packages.php?ID=23363 dropbox] can be installed from the [[AUR]]. Alternatively, [http://aur.archlinux.org/packages.php?ID=29432 dropbox-experimental] is also available.<br />
<br />
# After installing the package, you can start Dropbox from your application menu or run "dropboxd" from the command-line. The client icon will appear in the system tray.<br />
# Eventually a popup will ask you to login to your Dropbox account, or start a new one. Enter your credentials.<br />
# After some time you will see a "Welcome to Dropbox" popup, which will give you the opportunity to view a short tour of Dropbox.<br />
# Press the "Finish and go to My Dropbox".<br />
<br />
===Optional packages===<br />
<br />
*For a command-line interface, install [http://aur.archlinux.org/packages.php?ID=34310 dropbox-cli] from the [[AUR]].<br />
*For integration with nautilus, install [http://aur.archlinux.org/packages.php?ID=19615 nautilus-dropbox] from the [[AUR]]. The nautilus plugin will start dropbox automatically.<br />
*For integration with thunar, install [http://aur.archlinux.org/packages.php?ID=39214 thunar-dropbox] from the [[AUR]].<br />
*For KDE users, there is KDE client available: [http://aur.archlinux.org/packages.php?ID=41169 kfilebox] from [[AUR]].<br />
<br />
===Autostart===<br />
<br />
Dropbox can be autostarted by adding dropboxd to .xinitrc (or autostart.sh, depending on your setup). Alternatively, you can [[#Daemon|start it as a daemon]].<br />
<br />
== Alternative to install: use the web interface ==<br />
<br />
If all you need is basic access to the files in a dropbox, you can use the web interface at http://dropbox.com to upload and download files to your dropbox. This can be a viable alternative to running a dropbox daemon and mirroring all the files on your own machine.<br />
<br />
==Daemon==<br />
<br />
To run dropbox as a daemon like sshd or vsftpd, simply do the following:<br />
<br />
As root, copy this into a file called /etc/rc.d/dropboxd and set USER to your username.<br />
<br />
<pre><br />
#!/bin/bash<br />
<br />
USER=yourusername<br />
<br />
. /etc/rc.conf<br />
. /etc/rc.d/functions<br />
<br />
PID=`pidof -o %PPID /opt/dropbox/dropbox`<br />
<br />
case "$1" in<br />
start)<br />
stat_busy "Starting Dropbox Service"<br />
[ -z "$PID" ] && su -c "/usr/bin/dropboxd &" $USER<br />
if [ $? -gt 0 ]; then<br />
stat_fail<br />
else<br />
add_daemon dropboxd<br />
stat_done<br />
fi<br />
;;<br />
stop)<br />
stat_busy "Stopping Dropbox Service"<br />
[ ! -z "$PID" ] && kill $PID > /dev/null<br />
if [ $? -gt 0 ]; then<br />
stat_fail<br />
else<br />
rm_daemon dropboxd<br />
stat_done<br />
fi<br />
;;<br />
restart)<br />
$0 stop<br />
sleep 3<br />
$0 start<br />
;;<br />
*)<br />
echo "usage: $0 {start|stop|restart}"<br />
;;<br />
esac<br />
exit 0<br />
</pre><br />
<br />
Make the file executable with<br />
# chmod +x /etc/rc.d/dropboxd<br />
<br />
This allows you to start or stop dropboxd just like any other service. place it in the daemons array in rc.conf for it to start at boot.<br />
<br />
# /etc/rc.d/dropboxd start<br />
# /etc/rc.d/dropboxd stop<br />
# /etc/rc.d/dropboxd restart<br />
<br />
And in rc.conf:<br />
DAEMONS=(... '''@dropboxd''' ...)<br />
<br />
==Without Nautilus (Another Way)==<br />
<br />
Another way to use Dropbox without Nautilus but with another file manager like Thunar is described below:<br />
<br />
1. Create a fake Nautilus script that will launch Thunar:<br />
$ sudo touch /usr/bin/nautilus && sudo chmod +x /usr/bin/nautilus && sudo nano /usr/bin/nautilus<br />
<br />
2. Insert this text into the file, then save and exit:<br />
#!/bin/bash<br />
exec thunar $2<br />
exit 0<br />
<br />
3. Launch Dropbox<br />
$ dropboxd<br />
<br />
4. Click on the dropbox tray icon to open your dropbox folder in Thunar.<br />
<br />
'''Note:''' in this way there is no need to create a dropbox daemon in /etc/rc.d and to start it at boot via /etc/rc.conf or to make it start via your session manager: just leave the "Start dropbox on system startup" option flagged in the Preferences window.<br />
<br />
'''Note:''' If you already have nautilus instaled but don't want to use it, neither modify the existing file under /usr/bin, just change the /usr/bin for /opt/dropbox in the step 2 above, like this: $ sudo touch /opt/dropbox/nautilus && sudo chmod +x /opt/dropbox/nautilus && sudo nano /opt/dropbox/nautilus. Dropbox will look this path first!<br />
<br />
==Securing your Dropbox==<br />
<br />
If you want to store sensitive data in your Dropbox, you should encrypt it before. Syncing to Dropbox is encrypted, but all files are (for the time being) stored on the server just as you put them in your Dropbox.<br />
<br />
* Dropbox works with [[Truecrypt]], and after you initially uploaded the Truecrypt volume to Dropbox, performance is quite ok, because of Dropbox has a working binary diff.<br />
<br />
* Another possibility is to use [[EncFS]], which has the advantage that all files are encrypted separately, i.e. you don't have to determine in advance the size of the content you want to encrypt and your encrypted directory grows and shrinks while you add/delete/modify files in it. You can also mount an encrypted volume at startup using the -S option of encfs to avoid having to input the passphrase, but note that your encrypted files are not secure from someone who has direct access to your computer.<br />
<br />
==Multiple dropbox instances==<br />
<br />
If you need to separate or distinguish your data, personal and work usage for example, you can subscribe to dropbox with different email addresses and have multiple directories synced to different instances.<br />
<br />
The basic principle and general howto are described in the [http://wiki.dropbox.com/TipsAndTricks/MultipleInstancesOnUnix Dropbox Wiki].<br />
<br />
'''Only thing to keep in mind: when dealing with multiple instances you have to select the dropbox destination folder, which the dropbox installer asks in the last step; usage examples may be /home/dropbox-personal, /home/dropbox-work and so on.'''<br />
<br />
For convenience, here is a script that I use to accomplish the task: just add a dir in the "dropboxes" list to have another instance of dropbox, referring to the dir, loaded at script startup.<br />
<br />
<pre><br />
#!/bin/bash<br />
<br />
#*******************************<br />
# Multiple dropbox instances<br />
#*******************************<br />
<br />
dropboxes=".dropbox-personal .dropbox-work"<br />
<br />
for dropbox in $dropboxes<br />
do<br />
if ! [ -d $HOME/$dropbox ];then<br />
mkdir $HOME/$dropbox<br />
fi<br />
HOME=$HOME/$dropbox /usr/bin/dropbox start -i<br />
done<br />
</pre><br />
<br />
==Dropbox on laptops==<br />
<br />
Dropbox itself is pretty good at dealing with connectivity problems. If you have a laptop and roam between different network environments, dropbox will have problems reconnecting if you do not restart it. The easiest way to solve this with [[netcfg]] is to use POST_UP and PRE_DOWN.<br />
<br />
In every network profile you use, add the appropriate commands:<br />
<pre><br />
POST_UP="any other code; su -c '/usr/bin/dropboxd &' your_user"<br />
PRE_DOWN="any other code; killall dropbox"<br />
</pre><br />
Obviously, your_user has to be edited and 'any other code;' can be omitted if you do not have any. The above will make sure that dropbox is running only if there is a network profile active.<br />
<br />
==Alternatives==<br />
*[https://one.ubuntu.com/ Ubuntu One], available in [http://aur.archlinux.org/packages.php?ID=30081 AUR].<br />
*[https://spideroak.com/ Spideroak], available in [http://aur.archlinux.org/packages.php?ID=24401 AUR].<br />
*[http://kdropbox.deuteros.es/ KFileBox], available in [http://aur.archlinux.org/packages.php?ID=41169 AUR].</div>Bharanideepanhttps://wiki.archlinux.org/index.php?title=Autostarting&diff=123355Autostarting2010-12-02T05:14:40Z<p>Bharanideepan: /* Graphical */</p>
<hr />
<div>[[Category:Boot process (English)]]<br />
{{Expansion}}<br />
== Console ==<br />
<br />
To autostart programs in console you can use shell startup files/directories:<br />
/etc/profile<br />
/etc/profile.d/<br />
/etc/profile.$SHELL<br />
/etc/bash.bashrc<br />
~/.bashrc<br />
~/.bash_profile<br />
~/.zshrc<br />
<br />
== Graphical ==<br />
If you want to autostart programs automatically when you login into your WM (Window Manager) or DE (Desktop Environment), you should do the following:<br />
<br />
=== Xinitrc Method ===<br />
<br />
If you use [[Xinitrc]] to start your WM/DE then you can add your applications list to .xinitrc file . <br />
<br />
=== GNOME, KDE and XFCE ===<br />
<br />
You can put [[Creating desktop entries and menus|.desktop]] files in {{Filename|~/.config/autostart/}}<br />
<br />
=== Dedicated GUI ===<br />
<br />
GNOME, KDE and XFCE all have a dedicated GUI for autostart settings.<br />
<br />
=== KDE (Legacy) ===<br />
<br />
KDE also has a specific folder: {{Filename|~/.kde/Autostart}} or {{Filename|~/.kde4/Autostart}}<br />
<br />
=== XFCE (Legacy) ===<br />
<br />
In the Xfce versions prior to 4.4 the programs had to be located in {{Filename|~/Desktop/Autostart/}}<br />
<br />
=== Fluxbox ===<br />
<br />
See [[Fluxbox#Autostarting Applications]].<br />
<br />
=== Openbox ===<br />
<br />
See [[Openbox#Startup programs]].</div>Bharanideepanhttps://wiki.archlinux.org/index.php?title=Arch_is_the_best&diff=103482Arch is the best2010-04-15T14:48:18Z<p>Bharanideepan: /* Translations */</p>
<hr />
<div>{{Expansion}}<br />
[[Category:About Arch (English)]]<br />
<br />
== Purpose ==<br />
<br />
The '''Arch is the best''' project is a very sophisticated and exquisite, ego-boosting and mind-blowing (albeit perhaps a bit over-engineered) project which aims to prove Arch's superiority.<br />
<br />
== History ==<br />
<br />
The project was initiated in April 2008 by long time Arch community member [http://bbs.archlinux.org/profile.php?id=2529 lucke] as a simple shell script which provided irrefutable proof that "Arch is the best". Over the following weeks, this project gathered momentum and was ported to multiple different languages, both programming and verbal.<br />
<br />
== The Code ==<br />
<br />
The "Arch is the best" project is ported to many programming languages.<br />
<br />
'''Ada''' - A pascal dialect<br />
<br />
with Ada.Text_IO;<br />
use Ada.Text_IO;<br />
procedure ArchIsTheBest is<br />
begin<br />
Put_Line("Arch is the best!");<br />
end HelloWorld;<br />
<br />
'''Awk'''<br />
<br />
BEGIN {<br />
print "Arch is the best!"<br />
}<br />
<br />
'''Portable GNU assembler''' - as -o arch.o arch.s && ld -o arch -O0 arch.o<br />
<br />
.section .data<br />
archIsBest: <br />
.ascii "Arch is the best!\n"<br />
archIsBest_len:<br />
.long . - archIsBest<br />
.section .text<br />
.globl _start<br />
_start:<br />
xorl %ebx, %ebx<br />
movl $4, %eax <br />
xorl %ebx, %ebx<br />
incl %ebx <br />
leal archIsBest, %ecx<br />
movl archIsBest_len, %edx <br />
int $0x80 <br />
xorl %eax, %eax<br />
incl %eax<br />
xorl %ebx, %ebx <br />
int $0x80<br />
<br />
'''Bash''' - the original program, should be compatible with any shell<br />
#!/bin/bash<br />
<br />
echo "Arch is the best!"<br />
<br />
'''Bash (Alternate)''' - handy for piping the output to your favourite IRC/email/IM client. Should work with any shell.<br />
#!/bin/bash<br />
yes Arch is the best!<br />
<br />
'''C''' - note the three space indenting used in this project, much like that used by other superior beings.<br />
#include <stdio.h><br />
#include <stdlib.h><br />
int main (int argc, char *argv[]) <br />
{<br />
fprintf(stdout,"Arch is the best!\n");<br />
exit(EXIT_SUCCESS);<br />
}<br />
<br />
'''C++''' - Arch == Linux++<br />
#include <iostream><br />
#include <cstdlib><br />
int main (int argc, char *argv[])<br />
{<br />
std::cout << "Arch is the best!" << std::endl;<br />
exit(EXIT_SUCCESS);<br />
}<br />
<br />
'''Clojure''' - A Lisp dialect that runs on the JVM<br />
(def translations {"english" "Arch is the best!",<br />
"german" "Arch ist das Beste!",<br />
"australian" "Arch is fair dinkum, mate!",<br />
"h4x0r" "arhc 51 7he be57!",<br />
"spanish" "¡Arch es el mejor!"})<br />
<br />
(defn arch-is-the-best<br />
"Asks for a language and prints the corresponding translation. <br />
Loops until input is 'quit'"<br />
[]<br />
(println "Available languages: ")<br />
(doseq [language (keys translations)]<br />
(println (str "\t" language)))<br />
(flush)<br />
(loop []<br />
(print "Enter language, or quit: ")<br />
(flush)<br />
(let [input (. (read-line) toLowerCase)]<br />
(if (= input "quit")<br />
(println "Goodbye!")<br />
(do<br />
(println (translations input "Bad input!"))<br />
(recur))))))<br />
<br />
'''Common Lisp''' - Tested on SBCL, feel free to add more of the translations in<br />
#!/usr/bin/sbcl --script<br />
(defparameter *best-list* '((English "Arch is the best!")<br />
(Chinese "Arch, 她出类拔萃!")<br />
(German "Arch ist das Beste!")<br />
(Greek "Το Arch είναι το καλύτερο!")))<br />
(defun aitb ()<br />
(format t "Available languages: ~{~{~@(~a~)~*~}~^, ~}.~%" *best-list*)<br />
(loop for input = (progn (format t "~&Input the desired language, (or 'quit'): ~%")<br />
(force-output)<br />
(read-line))<br />
if (string-equal input "quit")<br />
do (loop-finish)<br />
else<br />
do (let ((language-def<br />
(assoc input *best-list*<br />
:key (lambda (lang) (symbol-name lang))<br />
:test #'string-equal)))<br />
(if language-def<br />
(format t "~&~A~%" (second language-def))<br />
(format t "~&Invalid language.~%"))))<br />
(format t "~&May the Arch be with you!~%"))<br />
(aitb)<br />
<br />
'''Go''' - A language created by Google that's a love child between C, C++ and Python<br />
package main<br />
<br />
import "fmt"<br />
<br />
func main() <br />
{<br />
fmt.Printf("Arch is the best!\n")<br />
}<br />
<br />
<br />
'''Haskell''' - The language where IO is easy and unproblematic<br />
main = print "Arch is the best!"<br />
<br />
'''Python''' - a python version<br />
#!/usr/bin/env python<br />
<br />
print 'Arch is the best!'<br />
<br />
'''Ruby''' - a Ruby version<br />
#!/usr/bin/ruby -w<br />
<br />
puts 'Arch is the best!'<br />
<br />
'''Shoes''' - A Ruby version using Shoes for a GUI<br />
Shoes.app :width => 135, :height => 30 do <br />
para "Arch is the Best!"<br />
end<br />
<br />
'''Perl''' - a Perl version<br />
#!/usr/bin/perl<br />
<br />
print "Arch is the best!\n";<br />
<br />
'''Prolog''' - a version in Prolog<br />
format('Arch is the best~n',[]).<br />
<br />
'''Common Lisp''' - should run on any implementation (Clisp, Allegro, SBCL...)<br />
(princ "Arch is the best!")<br />
<br />
'''brainf*ck''' - doesn't the language name exaplain it?<br />
++>++++++>+++++<+[>[->+<]<->++++++++++<]>>.<[-]>[-<++>]<br />
<----------------.---------------.+++++.<+++[-<++++++++++>]<.<br />
>>+.++++++++++.<<.>>+.------------.---.<<.>>---.<br />
+++.++++++++++++++.+.<<+.[-]++++++++++.<br />
<br />
'''LOLCODE''' - why not?<br />
HAI<br />
CAN HAS STDIO?<br />
VISIBLE "ARCH IS TEH PWNZ LOL!"<br />
KTHXBYE<br />
<br />
'''Befunge''' - believed to be the first two-dimensional, ASCII-based, general-purpose (in the sense of "you could plausibly write Hunt the Wumpus in it") programming language<br />
<v"Arch is the best!"0<br />
<,_@#:<br />
<br />
'''PHP''' - a PHP version<br />
<?<br />
print 'Arch is the best!'<br />
?><br />
<br />
'''JavaScript''' - a JavaScript version<br />
<script type="text/javascript><br />
alert('Arch is the best!');<br />
</script><br />
<br />
'''Java''' - an extremely portable language, this will run on pretty much anything, it might even run on your toaster!<br />
public class ArchIsTheBest {<br />
public static void main(String[] args) {<br />
System.out.println("Arch is the best!");<br />
}<br />
}<br />
<br />
'''Scheme''' - a dialect of Lisp<br />
(display "Arch is the best!\n")<br />
<br />
'''R''' - a language for statistical computing (and much more!).<br />
archIsBest <- function() { cat("Arch is the best!\n") }<br />
archIsBest()<br />
<br />
'''Tcl/Tk'''<br />
#!/usr/bin/env tclsh<br />
puts "Arch is the best!"<br />
<br />
'''Pixilang''' - make me pixels<br />
print("Arch is the best!",0,0,#1897D1)<br />
frame<br />
<br />
==Translations==<br />
'''Arabic'''<br />
ارتش هو الأفضل<br />
<br />
'''Australian'''<br />
Arch is fair dinkum, mate!<br />
<br />
'''Bahasa Indonesia'''<br />
Arch terbaik!<br />
<br />
'''Basque'''<br />
Arch onena da!<br />
<br />
'''Bengali'''<br />
Arch shobcheye bhalo!<br />
<br />
'''Binary ASCII'''<br />
0100000101110010011000110110100000100000011010010111001100100000011101000110100001100101001000000110001001100101011100110111010000100001<br />
<br />
'''British'''<br />
Arch is simply spiffing.<br />
<br />
'''Bulgarian'''<br />
Арч е най-добрия!<br />
<br />
'''Chinese (Simplified)'''<br />
Arch 最棒了!<br />
<br />
'''Ancient Chinese'''<br />
阿祺,盡善矣。<br />
<br />
'''Czech'''<br />
Arch je nejlepší!<br />
<br />
'''Danish'''<br />
Arch er bedst!<br />
<br />
'''Desrever (Reversed)'''<br />
!tseb eht si hcrA<br />
<br />
'''Dutch'''<br />
Arch is de beste!<br />
<br />
'''Finnish'''<br />
Arch on paras!<br />
<br />
'''Filipino'''<br />
Mabuhay ang Arch!<br />
<br />
'''French'''<br />
Arch est le meilleur!<br />
<br />
'''Galician'''<br />
Arch é o mellor!<br />
<br />
'''German'''<br />
Arch ist das Beste!<br />
<br />
'''Greek'''<br />
Το Arch είναι το καλύτερο!<br />
<br />
'''h4x0r'''<br />
Arch 15 7h3 b357!<br />
<br />
'''Hantec'''<br />
Arch je nejbetélnější!<br />
<br />
'''Hebrew'''<br />
ארצ' זה הכי אחי!<br />
<br />
'''Hexadecimal ASCII'''<br />
4172636820697320746865206265737421<br />
<br />
'''Hindi'''<br />
आर्ख सब से अच्छा है ।<br />
<br />
'''Hungarian'''<br />
Az Arch a legjobb!<br />
<br />
'''Japanese'''<br />
Archが一番ですよ!<br />
<br />
'''Latvian'''<br />
Arch ir labākais!<br />
<br />
'''Marathi'''<br />
आर्च सगळ्यात भारी आहे!<br />
<br />
'''Norwegian'''<br />
Arch er best!<br />
<br />
'''Polish'''<br />
Arch jest najlepszy!<br />
<br />
'''Portuguese'''<br />
Arch é o melhor!<br />
<br />
'''Québécois'''<br />
Arch est le plus meilleure du monde!<br />
<br />
'''Romanian'''<br />
Аrch e cel mai bun!<br />
<br />
'''Russian'''<br />
Арч - лучший!<br />
<br />
'''Serbian'''<br />
Arch je najbolji!<br />
<br />
'''Slovenian'''<br />
Arch je najboljši!<br />
<br />
'''Spanish'''<br />
¡Arch es el mejor!<br />
<br />
'''Swedish'''<br />
Arch är bäst!<br />
<br />
'''Turkish'''<br />
Arch en iyisidir!<br />
<br />
'''Tamil'''<br />
ஆர்ச்சே சிறந்தது!<br />
<br />
'''Morse Code'''<br />
..- -... ..- -. - ..- / .. ... / - .... . / -... . ... -<br />
<br />
'''Braille'''<br />
⠁⠗⠉⠓⠀⠊⠎⠀⠮⠀⠃⠑⠎⠞⠲<br />
<br />
== Links ==<br />
<br />
* [http://bbs.archlinux.org/viewtopic.php?id=47306 forum Thread]<br />
* [http://arch.yarrt.com Unofficially Official Project Website]</div>Bharanideepanhttps://wiki.archlinux.org/index.php?title=Arch_is_the_best&diff=103481Arch is the best2010-04-15T14:43:49Z<p>Bharanideepan: /* Translations */ Added Tamil.</p>
<hr />
<div>{{Expansion}}<br />
[[Category:About Arch (English)]]<br />
<br />
== Purpose ==<br />
<br />
The '''Arch is the best''' project is a very sophisticated and exquisite, ego-boosting and mind-blowing (albeit perhaps a bit over-engineered) project which aims to prove Arch's superiority.<br />
<br />
== History ==<br />
<br />
The project was initiated in April 2008 by long time Arch community member [http://bbs.archlinux.org/profile.php?id=2529 lucke] as a simple shell script which provided irrefutable proof that "Arch is the best". Over the following weeks, this project gathered momentum and was ported to multiple different languages, both programming and verbal.<br />
<br />
== The Code ==<br />
<br />
The "Arch is the best" project is ported to many programming languages.<br />
<br />
'''Ada''' - A pascal dialect<br />
<br />
with Ada.Text_IO;<br />
use Ada.Text_IO;<br />
procedure ArchIsTheBest is<br />
begin<br />
Put_Line("Arch is the best!");<br />
end HelloWorld;<br />
<br />
'''Awk'''<br />
<br />
BEGIN {<br />
print "Arch is the best!"<br />
}<br />
<br />
'''Portable GNU assembler''' - as -o arch.o arch.s && ld -o arch -O0 arch.o<br />
<br />
.section .data<br />
archIsBest: <br />
.ascii "Arch is the best!\n"<br />
archIsBest_len:<br />
.long . - archIsBest<br />
.section .text<br />
.globl _start<br />
_start:<br />
xorl %ebx, %ebx<br />
movl $4, %eax <br />
xorl %ebx, %ebx<br />
incl %ebx <br />
leal archIsBest, %ecx<br />
movl archIsBest_len, %edx <br />
int $0x80 <br />
xorl %eax, %eax<br />
incl %eax<br />
xorl %ebx, %ebx <br />
int $0x80<br />
<br />
'''Bash''' - the original program, should be compatible with any shell<br />
#!/bin/bash<br />
<br />
echo "Arch is the best!"<br />
<br />
'''Bash (Alternate)''' - handy for piping the output to your favourite IRC/email/IM client. Should work with any shell.<br />
#!/bin/bash<br />
yes Arch is the best!<br />
<br />
'''C''' - note the three space indenting used in this project, much like that used by other superior beings.<br />
#include <stdio.h><br />
#include <stdlib.h><br />
int main (int argc, char *argv[]) <br />
{<br />
fprintf(stdout,"Arch is the best!\n");<br />
exit(EXIT_SUCCESS);<br />
}<br />
<br />
'''C++''' - Arch == Linux++<br />
#include <iostream><br />
#include <cstdlib><br />
int main (int argc, char *argv[])<br />
{<br />
std::cout << "Arch is the best!" << std::endl;<br />
exit(EXIT_SUCCESS);<br />
}<br />
<br />
'''Clojure''' - A Lisp dialect that runs on the JVM<br />
(def translations {"english" "Arch is the best!",<br />
"german" "Arch ist das Beste!",<br />
"australian" "Arch is fair dinkum, mate!",<br />
"h4x0r" "arhc 51 7he be57!",<br />
"spanish" "¡Arch es el mejor!"})<br />
<br />
(defn arch-is-the-best<br />
"Asks for a language and prints the corresponding translation. <br />
Loops until input is 'quit'"<br />
[]<br />
(println "Available languages: ")<br />
(doseq [language (keys translations)]<br />
(println (str "\t" language)))<br />
(flush)<br />
(loop []<br />
(print "Enter language, or quit: ")<br />
(flush)<br />
(let [input (. (read-line) toLowerCase)]<br />
(if (= input "quit")<br />
(println "Goodbye!")<br />
(do<br />
(println (translations input "Bad input!"))<br />
(recur))))))<br />
<br />
'''Common Lisp''' - Tested on SBCL, feel free to add more of the translations in<br />
#!/usr/bin/sbcl --script<br />
(defparameter *best-list* '((English "Arch is the best!")<br />
(Chinese "Arch, 她出类拔萃!")<br />
(German "Arch ist das Beste!")<br />
(Greek "Το Arch είναι το καλύτερο!")))<br />
(defun aitb ()<br />
(format t "Available languages: ~{~{~@(~a~)~*~}~^, ~}.~%" *best-list*)<br />
(loop for input = (progn (format t "~&Input the desired language, (or 'quit'): ~%")<br />
(force-output)<br />
(read-line))<br />
if (string-equal input "quit")<br />
do (loop-finish)<br />
else<br />
do (let ((language-def<br />
(assoc input *best-list*<br />
:key (lambda (lang) (symbol-name lang))<br />
:test #'string-equal)))<br />
(if language-def<br />
(format t "~&~A~%" (second language-def))<br />
(format t "~&Invalid language.~%"))))<br />
(format t "~&May the Arch be with you!~%"))<br />
(aitb)<br />
<br />
'''Go''' - A language created by Google that's a love child between C, C++ and Python<br />
package main<br />
<br />
import "fmt"<br />
<br />
func main() <br />
{<br />
fmt.Printf("Arch is the best!\n")<br />
}<br />
<br />
<br />
'''Haskell''' - The language where IO is easy and unproblematic<br />
main = print "Arch is the best!"<br />
<br />
'''Python''' - a python version<br />
#!/usr/bin/env python<br />
<br />
print 'Arch is the best!'<br />
<br />
'''Ruby''' - a Ruby version<br />
#!/usr/bin/ruby -w<br />
<br />
puts 'Arch is the best!'<br />
<br />
'''Shoes''' - A Ruby version using Shoes for a GUI<br />
Shoes.app :width => 135, :height => 30 do <br />
para "Arch is the Best!"<br />
end<br />
<br />
'''Perl''' - a Perl version<br />
#!/usr/bin/perl<br />
<br />
print "Arch is the best!\n";<br />
<br />
'''Prolog''' - a version in Prolog<br />
format('Arch is the best~n',[]).<br />
<br />
'''Common Lisp''' - should run on any implementation (Clisp, Allegro, SBCL...)<br />
(princ "Arch is the best!")<br />
<br />
'''brainf*ck''' - doesn't the language name exaplain it?<br />
++>++++++>+++++<+[>[->+<]<->++++++++++<]>>.<[-]>[-<++>]<br />
<----------------.---------------.+++++.<+++[-<++++++++++>]<.<br />
>>+.++++++++++.<<.>>+.------------.---.<<.>>---.<br />
+++.++++++++++++++.+.<<+.[-]++++++++++.<br />
<br />
'''LOLCODE''' - why not?<br />
HAI<br />
CAN HAS STDIO?<br />
VISIBLE "ARCH IS TEH PWNZ LOL!"<br />
KTHXBYE<br />
<br />
'''Befunge''' - believed to be the first two-dimensional, ASCII-based, general-purpose (in the sense of "you could plausibly write Hunt the Wumpus in it") programming language<br />
<v"Arch is the best!"0<br />
<,_@#:<br />
<br />
'''PHP''' - a PHP version<br />
<?<br />
print 'Arch is the best!'<br />
?><br />
<br />
'''JavaScript''' - a JavaScript version<br />
<script type="text/javascript><br />
alert('Arch is the best!');<br />
</script><br />
<br />
'''Java''' - an extremely portable language, this will run on pretty much anything, it might even run on your toaster!<br />
public class ArchIsTheBest {<br />
public static void main(String[] args) {<br />
System.out.println("Arch is the best!");<br />
}<br />
}<br />
<br />
'''Scheme''' - a dialect of Lisp<br />
(display "Arch is the best!\n")<br />
<br />
'''R''' - a language for statistical computing (and much more!).<br />
archIsBest <- function() { cat("Arch is the best!\n") }<br />
archIsBest()<br />
<br />
'''Tcl/Tk'''<br />
#!/usr/bin/env tclsh<br />
puts "Arch is the best!"<br />
<br />
'''Pixilang''' - make me pixels<br />
print("Arch is the best!",0,0,#1897D1)<br />
frame<br />
<br />
==Translations==<br />
'''Arabic'''<br />
ارتش هو الأفضل<br />
<br />
'''Australian'''<br />
Arch is fair dinkum, mate!<br />
<br />
'''Bahasa Indonesia'''<br />
Arch terbaik!<br />
<br />
'''Basque'''<br />
Arch onena da!<br />
<br />
'''Bengali'''<br />
Arch shobcheye bhalo!<br />
<br />
'''Binary ASCII'''<br />
0100000101110010011000110110100000100000011010010111001100100000011101000110100001100101001000000110001001100101011100110111010000100001<br />
<br />
'''British'''<br />
Arch is simply spiffing.<br />
<br />
'''Bulgarian'''<br />
Арч е най-добрия!<br />
<br />
'''Chinese (Simplified)'''<br />
Arch 最棒了!<br />
<br />
'''Ancient Chinese'''<br />
阿祺,盡善矣。<br />
<br />
'''Czech'''<br />
Arch je nejlepší!<br />
<br />
'''Danish'''<br />
Arch er bedst!<br />
<br />
'''Desrever (Reversed)'''<br />
!tseb eht si hcrA<br />
<br />
'''Dutch'''<br />
Arch is de beste!<br />
<br />
'''Finnish'''<br />
Arch on paras!<br />
<br />
'''Filipino'''<br />
Mabuhay ang Arch!<br />
<br />
'''French'''<br />
Arch est le meilleur!<br />
<br />
'''Galician'''<br />
Arch é o mellor!<br />
<br />
'''German'''<br />
Arch ist das Beste!<br />
<br />
'''Greek'''<br />
Το Arch είναι το καλύτερο!<br />
<br />
'''h4x0r'''<br />
Arch 15 7h3 b357!<br />
<br />
'''Hantec'''<br />
Arch je nejbetélnější!<br />
<br />
'''Hebrew'''<br />
ארצ' זה הכי אחי!<br />
<br />
'''Hexadecimal ASCII'''<br />
4172636820697320746865206265737421<br />
<br />
'''Hindi'''<br />
आर्ख सब से अच्छा है ।<br />
<br />
'''Hungarian'''<br />
Az Arch a legjobb!<br />
<br />
'''Japanese'''<br />
Archが一番ですよ!<br />
<br />
'''Latvian'''<br />
Arch ir labākais!<br />
<br />
'''Marathi'''<br />
आर्च सगळ्यात भारी आहे!<br />
<br />
'''Norwegian'''<br />
Arch er best!<br />
<br />
'''Polish'''<br />
Arch jest najlepszy!<br />
<br />
'''Portuguese'''<br />
Arch é o melhor!<br />
<br />
'''Québécois'''<br />
Arch est le plus meilleure du monde!<br />
<br />
'''Romanian'''<br />
Аrch e cel mai bun!<br />
<br />
'''Russian'''<br />
Арч - лучший!<br />
<br />
'''Serbian'''<br />
Arch je najbolji!<br />
<br />
'''Slovenian'''<br />
Arch je najboljši!<br />
<br />
'''Spanish'''<br />
¡Arch es el mejor!<br />
<br />
'''Swedish'''<br />
Arch är bäst!<br />
<br />
'''Turkish'''<br />
Arch en iyisidir!<br />
<br />
'''Tamil'''<br />
ஆர்ச்சே சிறந்தது! <br />
<br />
'''Morse Code'''<br />
..- -... ..- -. - ..- / .. ... / - .... . / -... . ... -<br />
<br />
'''Braille'''<br />
⠁⠗⠉⠓⠀⠊⠎⠀⠮⠀⠃⠑⠎⠞⠲<br />
<br />
== Links ==<br />
<br />
* [http://bbs.archlinux.org/viewtopic.php?id=47306 forum Thread]<br />
* [http://arch.yarrt.com Unofficially Official Project Website]</div>Bharanideepanhttps://wiki.archlinux.org/index.php?title=File_recovery&diff=102153File recovery2010-04-08T17:23:59Z<p>Bharanideepan: Added info about extundelete</p>
<hr />
<div>[[Category:HOWTOs (English)]]<br />
[[Category:Networking (English)]]<br />
<br />
==Preface/Introduction==<br />
===Page Overview===<br />
This article is meant to capture several file recovery or undelete options for [[Arch Linux]]. Please contribute to this page using the general format below and keeping it brief.<br />
===Special Notes===<br />
====Failing Drives====<br />
In the arena of data recovery, it is best to work on images of disks rather than the physical disks themselves. Generally, a failing drive's condition worsens over time. The goal ought to be to copy as much data as possible as early as possible, and to then abandon the disk. The dd_rescue utility (ddrescue in repos), unlike dd will repeatedly try to recover from errors, and will read the drive front to back, then back to front, attempting to salvage data. It keeps a log file so that you can pause and resume recovery without losing your progress.<br />
<br />
See [[Disk Cloning]].<br />
<br />
The image files created from a utility like ddrescue can then be mounted like a physical device and can be worked on safely. Always make a copy of the original image so that you can revert if things go sour!<br />
<br />
A tried and true method of improving failing drive reads is to keep it cold. A bit of time in the freezer is appropriate, but be careful to avoid bringing the drive from cold to warm too quickly, as condensation will form. Keeping the drive in the freezer with cables connected to the recovering PC works great.<br />
<br />
Do not attempt a filesystem check on a failing drive, as this will likely make the problem '''worse'''. Keep it read-only.<br />
====Backup Flash Media/Small Partitions====<br />
As an alternative to working with a 'live' partition (mounted or not), it is often preferable to work with an image provided that the filesystem in question isn't too large and that you have sufficient free HDD space to accommodate the image file. For example, flash memory devices like, thumb drives, digital cameras, portable music players, cellular phones, etc. <br />
<br />
Be sure to read the man pages for the utilities listed below to verify that they are capable of working with an image file.<br />
<br />
To make an image, one can use dd as follows:<br />
# dd if=/dev/target_partition of=/home/user/partition.image<br />
<br />
====Working with Digital Cameras====<br />
In order for some of the utils listed in the next section to work with flash media, one needs to have the device in question mounted as a block device (i.e. it is listed under /dev). Digital cameras operating in PTP (Picture Transfer Protocol) mode will not work in this regard. PTP cameras are transparently handled by libgphoto and/or libptp. Transparently as in, they don't get a block device. The alternative to PTP mode is USB Mass Storage (UMS) mode which may or may not be supported by your camera. Some cameras will have a menu item allowing the user to switch between the two modes; refer to your camera's user manual. If your camera does not support UMS mode and therefore cannot be accessed as a block device, your only alternative is to use a flash media reader and physically remove the media from your camera.<br />
<br />
==Foremost==<br />
===Description===<br />
'''Foremost''' is a console program to recover files based on their headers, footers, and internal data structures. This process is commonly referred to as data carving. Foremost can work on image files, such as those generated by dd, Safeback, Encase, etc, or directly on a drive. The headers and footers can be specified by a configuration file or you can use command line switches to specify built-in file types. These built-in types look at the data structures of a given file format allowing for a more reliable and faster recovery. <br />
===Installation===<br />
'''Foremost''' is available from the [[AUR]] in [http://aur.archlinux.org/packages.php?ID=2014 this page].<br />
===External Links===<br />
*Wiki: <br />
*Homepage: http://foremost.sourceforge.net<br />
==Extundelete==<br />
===Description===<br />
'''Extundelete''' is a console program that can recover deleted files from ext3 and ext4 partitions.It can recover all the recently deleted files from a partition and/or a specific file(s) given by relative path or inode information.Note that it works only when the partition is unmounted. The recovered files are saved in the current directory under the folder named RECOVERED_FILES.<br />
===Installation===<br />
'''Extundelete''' is available in [[AUR]] in [http://aur.archlinux.org/packages.php?ID=29736 this page]<br />
<br />
==Photorec==<br />
===Description===<br />
'''Photorec''' is a complementary utility to '''TestDisk'''; both open-source data recovery utilities licensed under the terms of the [http://www.gnu.org/licenses/gpl.html GNU Public License] (GPL). '''Photorec''' is file data recovery software designed to recover lost files including video, documents and archives from Hard Disks and CDRom and lost pictures (thus, its 'Photo Recovery' name) from digital camera memory. PhotoRec ignores the filesystem and goes after the underlying data, so it will still work even if your media's filesystem has been severely damaged or re-formatted.<br />
<br />
===Installation===<br />
Both '''TestDisk''' and '''Photorec''' are available for Arch i686 and x64_86 in the same package.<br />
# pacman -S testdisk<br />
<br />
===External Links===<br />
*Wiki (Photorec): http://www.cgsecurity.org/wiki/PhotoRec<br />
*Homepage: http://www.cgsecurity.org/<br />
<br />
==Testdisk==<br />
===Description===<br />
'''TestDisk''', like '''Photorec''' are both open-source data recovery utilities licensed under the terms of the [http://www.gnu.org/licenses/gpl.html GNU Public License] (GPL). '''TestDisk''' is primarily designed to help recover lost partitions and/or make non-booting disks bootable again when these symptoms are caused by faulty software, certain types of viruses or human error (such as accidentally deleting a Partition Table).<br />
<br />
===Installation===<br />
Both '''TestDisk''' and '''Photorec''' are available for Arch i686 and x64_86 in the same package.<br />
# pacman -S testdisk<br />
<br />
===External Links===<br />
*Wiki (TestDisk): http://www.cgsecurity.org/wiki/TestDisk<br />
*Homepage: http://www.cgsecurity.org/<br />
<br />
==e2fsck==<br />
===Description===<br />
'''e2fsck''', is the ext2/ext3 filesystem checker included in the base install of Arch. e2fsck relies on a valid superblock. A superblock is a description of the entire filesystem's parameters. Because this data is so important, several copies of the superblock are distributed amongst the partition data. e2fsck can take an alternate superblock argument if the main (first) superblock is damaged (use the -b option).<br />
<br />
To determine where the superblocks are, run dumpe2fs -h on the affected, unmounted partition. Superblocks are spaced differently depending on the blocksize specified when the ext2/ext3 filesystem was created.<br />
<br />
An alternate method to determine superblocks is to use the -n option with mke2fs. Be '''sure''' to use the -n flag, which "causes mke2fs to not actually create a filesystem, but display what it would do if it were to create a filesystem. This can be used to determine the location of the backup superblocks for a particular filesystem."<br />
<br />
===Installation===<br />
'''e2fsck''' and '''dumpe2fs''' are included in the base Arch i686 and x64_86 install.<br />
<br />
===External Links===<br />
*e2fsck man page: http://phpunixman.sourceforge.net/index.php/man/e2fsck/8<br />
*dumpe2fs man page: http://phpunixman.sourceforge.net/index.php?parameter=dumpe2fs&mode=man<br />
<br />
==Working with Raw Disk Images==<br />
If you backed up a drive using ddrescue or dd, and you need to mount this image as a physical drive, then look no further!<br />
===Mount the Entire Disk===<br />
In progress.<br />
===Mounting Partitions===<br />
Before you can work with the partitions and filesystems in a raw disk image, you must know where things are inside the image. See the next section for this.<br />
====Getting Disk Geometry====<br />
After mounting the entire disk image as a loopback device, you can inspect it for it's drive layout.<br />
===Using QEMU to Repair NTFS===<br />
Say you have a disk image that contains one or more NTFS partitions, and you need to run Windows chkdsk to fix the filesystem. QEMU let's you use a raw dd or ddrescue image as a real hard disk inside a virtual machine.<br />
# qemu -hda /path/to/primary.img -hdb /path/to/damagedDisk.img</div>Bharanideepanhttps://wiki.archlinux.org/index.php?title=Dwm&diff=96883Dwm2010-02-15T04:23:55Z<p>Bharanideepan: /* Patches & additional tiling modes */ Added information about pertag patch</p>
<hr />
<div>[[Category:Dynamic WMs (English)]]<br />
[[Category:HOWTOs (English)]]<br />
{{i18n|dwm}}<br />
{{Article summary start|Summary}}<br />
{{Article summary text|Information on installing dwm and increasing its potential}}<br />
{{Article summary heading|Related}}<br />
{{Article summary wiki|dmenu}}<br />
{{Article summary wiki|wmii}}<br />
{{Article summary end}}<br />
{{DISPLAYTITLE:dwm}}<br />
[http://dwm.suckless.org/ dwm] is a dynamic window manager for [[X]]. It manages windows in tiled, stacked, and full-screen layouts, as well as many others with the help of optional patches. Layouts can be applied dynamically, optimizing the environment for the application in use and the task performed. dwm is extremely lightweight and fast, written in C and with a stated design goal of remaining under 2000 source lines of code. It provides multi-head support for xrandr and Xinerama.<br />
<br />
==Installing==<br />
These instructions will install dwm using [[makepkg]] along with the Arch Build System, or [[ABS]] for short. This will allow reconfiguring it at a later time without complications. If only interested in installing dwm for a test drive, simply install the binary package from the repositories instead:<br />
# pacman -S dwm<br />
<br />
Note that by omitting compiling dwm from source a great deal of customizability is lost, since dwm's entire configuration is performed by editing its source code. Taking this in mind, the rest of the article assumes that dwm has been compiled from source as explained in the entirety of this section.<br />
<br />
===Requirements===<br />
Basic programming tools present in {{package Official|base-devel}} are needed in order to compile dwm and build a package for it, and the {{package Official|abs}} package is also a requisite for fetching the necessary build scripts:<br />
# pacman -S base-devel abs<br />
<br />
===Download build scripts with ABS===<br />
Once the required packages are installed, use ABS to fetch the latest build scripts from the repositories:<br />
# abs<br />
<br />
Lastly, copy the dwm build scripts from the ABS tree to a temporary directory. For example:<br />
$ cp -r /var/abs/community/dwm ~/dwm<br />
<br />
===Build and install package===<br />
Use {{Codeline|cd}} by switching to the directory containing the build scripts (the example above used {{Filename|~/dwm}}). Then run:<br />
$ makepkg -i<br />
<br />
This will compile dwm, build an Arch Linux package containing the resulting files, and install the package file all in one step. If problems are encountered, review the output for specific information. <br />
<br />
{{Tip|If this directory ({{filename|~/dwm}}) is saved, it can subsequently be used for making changes to the default configuration.}}<br />
<br />
==Configuring==<br />
dwm, as mentioned before, is exclusively configured at compile-time via some of its source files, namely {{Filename|config.h}} and {{Filename|config.mk}}. While the initial configuration provides a good set of defaults, it's realistic to expect that at some point potential users will probably want to make adjustments to their setups.<br />
<br />
===Method 1: ABS rebuild (recommended)===<br />
Modifying dwm is quite simple using this route.<br />
<br />
====Customizing config.h====<br />
Browse to the dwm source code directory saved during the [[#Installing|installation process]]; {{filename|~/dwm}} in the example. The {{filename|config.h}} found within this directory is where the general dwm preferences are stored. Most settings within the file should be self-explanatory, while others may not share the same trait. For detailed information on these settings, see the [http://www.suckless.org/dwm/ dwm website].<br />
<br />
{{note|Be sure to make a backup copy of config.h before modifying it, just in case something goes wrong.}}<br />
<br />
Once changes have been made, pipe the new md5sums into the [[PKGBUILD]]:<br />
$ makepkg -g >> PKGBUILD<br />
This will eliminate a checksum mismatch between the official config.h and the new revised copy.<br />
<br />
Now, compile and reinstall:<br />
$ makepkg -efi<br />
<br />
Assuming the configuration changes were valid, this command will compile dwm, build and reinstall the resulting package. If problems were encountered, review the output for specific information.<br />
<br />
Finally, restart dwm in order to apply the changes.<br />
<br />
====Notes====<br />
From now on, instead of updating the md5sums for every {{filename|config.h}} revision, which are known to become frequent, one may erase the md5sums array and build dwm with the {{codeline|--skipinteg}} option:<br />
$ makepkg -efi --skipinteg<br />
<br />
And after adding a few lines to dwm's start-up script, it is possible to [[#Restart dwm without logging out or closing programs|restart dwm without logging out or closing programs]].<br />
<br />
===Method 2: Mercurial (advanced)===<br />
dwm is maintained upstream within a [http://www.selenic.com/mercurial/wiki/ Mercurial] version control system at [http://hg.suckless.org/dwm suckless.org]. Those already familiar with Mercurial may find it more convenient to maintain configurations and patches within this system. A [http://www.suckless.org/dwm/customisation/patch_queue.html detailed tutorial] on this method is available at the dwm website.<br />
<br />
Before building dwm from the Mercurial sources, be sure to alter config.mk accordingly, because failure to do so may result in X crashes. Here are the values that need changing:<br />
<br />
Modify {{codeline|PREFIX}}:<br />
PREFIX = /usr<br />
The X11 include folder:<br />
X11INC = /usr/include/X11<br />
And the the X11 lib directory:<br />
X11LIB = /usr/lib/X11<br />
<br />
==Starting dwm==<br />
To start dwm with {{Codeline|startx}} or the [[SLIM]] login manager, simply append the following to {{Filename|~/.xinitrc}}: <br />
exec dwm<br />
<br />
For [[GDM]], add it to {{Filename|~/.Xclients}} instead, and select "Run XClient Script" from the Sessions menu.<br />
<br />
==Statusbar configuration==<br />
dwm uses {{Codeline|xsetroot -name}} to display information in its statusbar.<br />
<br />
===Basic statusbar===<br />
This example prints the date in [http://en.wikipedia.org/wiki/ISO_8601 ISO 8601] format. Add it to files {{filename|~/.xinitrc}} or {{filename|~/.Xclients}}:<br />
<pre><br />
while true; do<br />
xsetroot -name "$( date +"%F %R" )"<br />
sleep 1m # Update time every minute<br />
done &<br />
exec dwm<br />
</pre><br />
<br />
Here is an example intended for laptops that depends on the {{Package Official|acpi}} package for showing battery information:<br />
<pre><br />
while true ; do<br />
xsetroot -name "$( acpi -b | awk '{ print $3, $4 }' | tr -d ',' )"<br />
done &<br />
exec dwm<br />
</pre><br />
<br />
The script displays the amount of battery remaining besides its charging status by using the awk command to trim away the unneeded text from acpi, and tr to remove the commas.<br />
<br />
An alternative to the above is to selectively show the battery status depending on the current charging state:<br />
<pre><br />
while sleep 1m; do<br />
batt=`LC_ALL=C acpi -b`<br />
<br />
case $batt in<br />
*Discharging*) batt=${batt_main#* * * }; batt="${batt%%, *} " ;;<br />
*) batt='' ;;<br />
esac<br />
<br />
xsetroot -name "$batt`date +"%R"`"<br />
done &<br />
exec dwm<br />
</pre><br />
<br />
Finally, make sure there is only one instance of dwm in {{filename|~/.xinitrc}} or {{filename|~/.Xclients}}, so combining everything together should resemble this:<br />
~/.setbg<br />
autocutsel &<br />
termirssi &<br />
urxvt &<br />
<br />
while true; do<br />
xsetroot -name "$(date +"%F %R")"<br />
sleep 1m # Update time every minute<br />
done &<br />
'''exec dwm'''<br />
<br />
===Conky statusbar===<br />
Available from the [[AUR]], {{package AUR|conky-cli}} is a special build of conky which prints to <tt>stdout</tt>. If already accustomed to [[conky]], a statusbar rich with information can be ready within minutes. Once conky has been configured to preference, simply print it to the statusbar with {{Codeline|xsetroot -name}}:<br />
conky | while read -r; do xsetroot -name "$REPLY"; done &<br />
exec dwm<br />
<br />
The following is a sample conkyrc for a dual core CPU, displaying several stats:<br />
<pre><br />
background no<br />
out_to_console yes<br />
update_interval 2<br />
total_run_times 0<br />
use_spacer none<br />
<br />
TEXT<br />
$mpd_smart :: ${cpu cpu1}% / ${cpu cpu2}% ${loadavg 1} ${loadavg 2 3} :: ${acpitemp}c :: $memperc% ($mem) :: ${downspeed eth0}K/s ${upspeed eth0}K/s :: ${time %a %b %d %I:%M%P}<br />
</pre><br />
<br />
==Extended usage==<br />
<br />
===Patches & additional tiling modes===<br />
The official website is full of [http://www.suckless.org/dwm/patches patches] that can add extra functionality to dwm. Users can easily customize dwm by applying the modifications they like. The [http://www.suckless.org/dwm/patches/bottom_stack.html Bottom Stack] patch provides an additional tiling mode that splits the screen horizontally, as opposed to the default vertically oriented tiling mode.<br />
Very simmilar to this patch is bstack horizontal which further splits the tiles horizontally. <br />
<br />
The[http://dwm.suckless.org/patches/gapless_grid gaplessgrid patch] allows windows to be tiled like a grid.<br />
<br />
====Enable one layout per tag====<br />
The default behaviour of dwm is to apply the currently selected layout for all tags.To have different layouts for different tags use the [http://dwm.suckless.org/patches/pertag pertag] patch.<br />
<br />
===Fixing gaps around terminal windows===<br />
If there are empty gaps of desktop space outside terminal windows, it is likely due to the terminal's font size. Either adjust the size until finding the ideal scale that closes the gap, or toggle {{Codeline|resizehints}} to ''False'' in {{filename|config.h}}:<br />
static Bool resizehints = False; /* False means respect size hints in tiled resizals */<br />
<br />
This will cause dwm to ignore resize requests from all client windows, not just terminals. The downside to this workaround is that some terminals may suffer redraw anomalies, such as ghost lines and premature line wraps, among others.<br />
<br />
====Urxvt====<br />
Another choice for [[urxvt]] users is applying the [[urxvt#Fix maximized window gaps|hints patch]] and regressing to dwm's original behaviour:<br />
static Bool resizehints = '''True''';<br />
<br />
===Restart dwm without logging out or closing programs===<br />
For restarting dwm without logging out or closing applications, change or add a startup script so that it loads dwm in a ''while'' loop, like this:<br />
<pre><br />
while true; do<br />
# Log stderror to a file <br />
dwm 2> ~/.dwm.log<br />
# No error logging<br />
#dwm >/dev/null 2>&1<br />
done<br />
</pre><br />
<br />
dwm can now be restarted without destroying other X windows by pressing the usual Mod-Shift-Q combination.<br />
<br />
It's a good idea to place the above startup script into a separate file, {{Filename|~/bin/startdwm}} for instance, and execute it through {{filename|~/.xinitrc}}. From this point on, when desiring to actually end the X session simply execute {{Codeline|killall startdwm}}, or bind it to a convenient key.<br />
<br />
===Make the right Alt key work as if it were Mod4 (Windows Key)===<br />
When using Mod4 (aka Super/Windows Key) as the {{codeline|MODKEY}}, it may be equally convenient to have the right Alt key (Alt_R) act as Mod4. This will allow performing otherwise awkward keystrokes one-handed, such as zooming with Alt_R+Enter. <br />
<br />
First, find out which keycode is assigned to Alt_R:<br />
xmodmap -pke | grep Alt_R<br />
<br />
Then simply add the following to the startup script (e.g. {{filename|~/.xinitrc}}), changing the keycode ''113'' if necessary to the result gathered by the previous {{codeline|xmodmap}} command:<br />
xmodmap -e "keycode 113 = Super_L" # reassign Alt_R to Super_L<br />
xmodmap -e "remove mod1 = Super_L" # make sure X keeps it out of the mod1 group<br />
<br />
Now, any functions that are triggered by a Super_L (Windows) key press will also be triggered by an Alt_R key press.<br />
===Disable focus follows mouse behaviour===<br />
To disable focus follows mouse behaviour comment out the following line in definiton of struct handler in dwm.c <br />
<pre>[EnterNotify] = enternotify, </pre><br />
<br />
==Resources==<br />
* [http://www.suckless.org/dwm dwm's official website]<br />
* [[dmenu]] - Simple application launcher from the developers of dwm<br />
* The [http://bbs.archlinux.org/viewtopic.php?id=57549/ dwm thread] on the forums<br />
* [http://www.flickr.com/photos/cinderwick/sets/72157604733895131/ dwm wallpapers] and the forums' [http://bbs.archlinux.org/viewtopic.php?id=57768/ wallpaper thread] for a selection of dwm wallpapers<br />
* [http://www.xsnake.net/howto/dwm/dwm-eng.php HowTo by Snake]<br />
* [http://0x80.org/blog/?p=72 Moved to dwm]</div>Bharanideepanhttps://wiki.archlinux.org/index.php?title=Dwm&diff=96881Dwm2010-02-15T04:15:54Z<p>Bharanideepan: /* Extended usage */</p>
<hr />
<div>[[Category:Dynamic WMs (English)]]<br />
[[Category:HOWTOs (English)]]<br />
{{i18n|dwm}}<br />
{{Article summary start|Summary}}<br />
{{Article summary text|Information on installing dwm and increasing its potential}}<br />
{{Article summary heading|Related}}<br />
{{Article summary wiki|dmenu}}<br />
{{Article summary wiki|wmii}}<br />
{{Article summary end}}<br />
{{DISPLAYTITLE:dwm}}<br />
[http://dwm.suckless.org/ dwm] is a dynamic window manager for [[X]]. It manages windows in tiled, stacked, and full-screen layouts, as well as many others with the help of optional patches. Layouts can be applied dynamically, optimizing the environment for the application in use and the task performed. dwm is extremely lightweight and fast, written in C and with a stated design goal of remaining under 2000 source lines of code. It provides multi-head support for xrandr and Xinerama.<br />
<br />
==Installing==<br />
These instructions will install dwm using [[makepkg]] along with the Arch Build System, or [[ABS]] for short. This will allow reconfiguring it at a later time without complications. If only interested in installing dwm for a test drive, simply install the binary package from the repositories instead:<br />
# pacman -S dwm<br />
<br />
Note that by omitting compiling dwm from source a great deal of customizability is lost, since dwm's entire configuration is performed by editing its source code. Taking this in mind, the rest of the article assumes that dwm has been compiled from source as explained in the entirety of this section.<br />
<br />
===Requirements===<br />
Basic programming tools present in {{package Official|base-devel}} are needed in order to compile dwm and build a package for it, and the {{package Official|abs}} package is also a requisite for fetching the necessary build scripts:<br />
# pacman -S base-devel abs<br />
<br />
===Download build scripts with ABS===<br />
Once the required packages are installed, use ABS to fetch the latest build scripts from the repositories:<br />
# abs<br />
<br />
Lastly, copy the dwm build scripts from the ABS tree to a temporary directory. For example:<br />
$ cp -r /var/abs/community/dwm ~/dwm<br />
<br />
===Build and install package===<br />
Use {{Codeline|cd}} by switching to the directory containing the build scripts (the example above used {{Filename|~/dwm}}). Then run:<br />
$ makepkg -i<br />
<br />
This will compile dwm, build an Arch Linux package containing the resulting files, and install the package file all in one step. If problems are encountered, review the output for specific information. <br />
<br />
{{Tip|If this directory ({{filename|~/dwm}}) is saved, it can subsequently be used for making changes to the default configuration.}}<br />
<br />
==Configuring==<br />
dwm, as mentioned before, is exclusively configured at compile-time via some of its source files, namely {{Filename|config.h}} and {{Filename|config.mk}}. While the initial configuration provides a good set of defaults, it's realistic to expect that at some point potential users will probably want to make adjustments to their setups.<br />
<br />
===Method 1: ABS rebuild (recommended)===<br />
Modifying dwm is quite simple using this route.<br />
<br />
====Customizing config.h====<br />
Browse to the dwm source code directory saved during the [[#Installing|installation process]]; {{filename|~/dwm}} in the example. The {{filename|config.h}} found within this directory is where the general dwm preferences are stored. Most settings within the file should be self-explanatory, while others may not share the same trait. For detailed information on these settings, see the [http://www.suckless.org/dwm/ dwm website].<br />
<br />
{{note|Be sure to make a backup copy of config.h before modifying it, just in case something goes wrong.}}<br />
<br />
Once changes have been made, pipe the new md5sums into the [[PKGBUILD]]:<br />
$ makepkg -g >> PKGBUILD<br />
This will eliminate a checksum mismatch between the official config.h and the new revised copy.<br />
<br />
Now, compile and reinstall:<br />
$ makepkg -efi<br />
<br />
Assuming the configuration changes were valid, this command will compile dwm, build and reinstall the resulting package. If problems were encountered, review the output for specific information.<br />
<br />
Finally, restart dwm in order to apply the changes.<br />
<br />
====Notes====<br />
From now on, instead of updating the md5sums for every {{filename|config.h}} revision, which are known to become frequent, one may erase the md5sums array and build dwm with the {{codeline|--skipinteg}} option:<br />
$ makepkg -efi --skipinteg<br />
<br />
And after adding a few lines to dwm's start-up script, it is possible to [[#Restart dwm without logging out or closing programs|restart dwm without logging out or closing programs]].<br />
<br />
===Method 2: Mercurial (advanced)===<br />
dwm is maintained upstream within a [http://www.selenic.com/mercurial/wiki/ Mercurial] version control system at [http://hg.suckless.org/dwm suckless.org]. Those already familiar with Mercurial may find it more convenient to maintain configurations and patches within this system. A [http://www.suckless.org/dwm/customisation/patch_queue.html detailed tutorial] on this method is available at the dwm website.<br />
<br />
Before building dwm from the Mercurial sources, be sure to alter config.mk accordingly, because failure to do so may result in X crashes. Here are the values that need changing:<br />
<br />
Modify {{codeline|PREFIX}}:<br />
PREFIX = /usr<br />
The X11 include folder:<br />
X11INC = /usr/include/X11<br />
And the the X11 lib directory:<br />
X11LIB = /usr/lib/X11<br />
<br />
==Starting dwm==<br />
To start dwm with {{Codeline|startx}} or the [[SLIM]] login manager, simply append the following to {{Filename|~/.xinitrc}}: <br />
exec dwm<br />
<br />
For [[GDM]], add it to {{Filename|~/.Xclients}} instead, and select "Run XClient Script" from the Sessions menu.<br />
<br />
==Statusbar configuration==<br />
dwm uses {{Codeline|xsetroot -name}} to display information in its statusbar.<br />
<br />
===Basic statusbar===<br />
This example prints the date in [http://en.wikipedia.org/wiki/ISO_8601 ISO 8601] format. Add it to files {{filename|~/.xinitrc}} or {{filename|~/.Xclients}}:<br />
<pre><br />
while true; do<br />
xsetroot -name "$( date +"%F %R" )"<br />
sleep 1m # Update time every minute<br />
done &<br />
exec dwm<br />
</pre><br />
<br />
Here is an example intended for laptops that depends on the {{Package Official|acpi}} package for showing battery information:<br />
<pre><br />
while true ; do<br />
xsetroot -name "$( acpi -b | awk '{ print $3, $4 }' | tr -d ',' )"<br />
done &<br />
exec dwm<br />
</pre><br />
<br />
The script displays the amount of battery remaining besides its charging status by using the awk command to trim away the unneeded text from acpi, and tr to remove the commas.<br />
<br />
An alternative to the above is to selectively show the battery status depending on the current charging state:<br />
<pre><br />
while sleep 1m; do<br />
batt=`LC_ALL=C acpi -b`<br />
<br />
case $batt in<br />
*Discharging*) batt=${batt_main#* * * }; batt="${batt%%, *} " ;;<br />
*) batt='' ;;<br />
esac<br />
<br />
xsetroot -name "$batt`date +"%R"`"<br />
done &<br />
exec dwm<br />
</pre><br />
<br />
Finally, make sure there is only one instance of dwm in {{filename|~/.xinitrc}} or {{filename|~/.Xclients}}, so combining everything together should resemble this:<br />
~/.setbg<br />
autocutsel &<br />
termirssi &<br />
urxvt &<br />
<br />
while true; do<br />
xsetroot -name "$(date +"%F %R")"<br />
sleep 1m # Update time every minute<br />
done &<br />
'''exec dwm'''<br />
<br />
===Conky statusbar===<br />
Available from the [[AUR]], {{package AUR|conky-cli}} is a special build of conky which prints to <tt>stdout</tt>. If already accustomed to [[conky]], a statusbar rich with information can be ready within minutes. Once conky has been configured to preference, simply print it to the statusbar with {{Codeline|xsetroot -name}}:<br />
conky | while read -r; do xsetroot -name "$REPLY"; done &<br />
exec dwm<br />
<br />
The following is a sample conkyrc for a dual core CPU, displaying several stats:<br />
<pre><br />
background no<br />
out_to_console yes<br />
update_interval 2<br />
total_run_times 0<br />
use_spacer none<br />
<br />
TEXT<br />
$mpd_smart :: ${cpu cpu1}% / ${cpu cpu2}% ${loadavg 1} ${loadavg 2 3} :: ${acpitemp}c :: $memperc% ($mem) :: ${downspeed eth0}K/s ${upspeed eth0}K/s :: ${time %a %b %d %I:%M%P}<br />
</pre><br />
<br />
==Extended usage==<br />
<br />
===Patches & additional tiling modes===<br />
The official website is full of [http://www.suckless.org/dwm/patches patches] that can add extra functionality to dwm. Users can easily customize dwm by applying the modifications they like. The [http://www.suckless.org/dwm/patches/bottom_stack.html Bottom Stack] patch provides an additional tiling mode that splits the screen horizontally, as opposed to the default vertically oriented tiling mode.<br />
Very simmilar to this patch is bstack horizontal which further splits the tiles horizontally. <br />
<br />
The[http://dwm.suckless.org/patches/gapless_grid gaplessgrid patch] allows windows to be tiled like a grid.<br />
<br />
===Fixing gaps around terminal windows===<br />
If there are empty gaps of desktop space outside terminal windows, it is likely due to the terminal's font size. Either adjust the size until finding the ideal scale that closes the gap, or toggle {{Codeline|resizehints}} to ''False'' in {{filename|config.h}}:<br />
static Bool resizehints = False; /* False means respect size hints in tiled resizals */<br />
<br />
This will cause dwm to ignore resize requests from all client windows, not just terminals. The downside to this workaround is that some terminals may suffer redraw anomalies, such as ghost lines and premature line wraps, among others.<br />
<br />
====Urxvt====<br />
Another choice for [[urxvt]] users is applying the [[urxvt#Fix maximized window gaps|hints patch]] and regressing to dwm's original behaviour:<br />
static Bool resizehints = '''True''';<br />
<br />
===Restart dwm without logging out or closing programs===<br />
For restarting dwm without logging out or closing applications, change or add a startup script so that it loads dwm in a ''while'' loop, like this:<br />
<pre><br />
while true; do<br />
# Log stderror to a file <br />
dwm 2> ~/.dwm.log<br />
# No error logging<br />
#dwm >/dev/null 2>&1<br />
done<br />
</pre><br />
<br />
dwm can now be restarted without destroying other X windows by pressing the usual Mod-Shift-Q combination.<br />
<br />
It's a good idea to place the above startup script into a separate file, {{Filename|~/bin/startdwm}} for instance, and execute it through {{filename|~/.xinitrc}}. From this point on, when desiring to actually end the X session simply execute {{Codeline|killall startdwm}}, or bind it to a convenient key.<br />
<br />
===Make the right Alt key work as if it were Mod4 (Windows Key)===<br />
When using Mod4 (aka Super/Windows Key) as the {{codeline|MODKEY}}, it may be equally convenient to have the right Alt key (Alt_R) act as Mod4. This will allow performing otherwise awkward keystrokes one-handed, such as zooming with Alt_R+Enter. <br />
<br />
First, find out which keycode is assigned to Alt_R:<br />
xmodmap -pke | grep Alt_R<br />
<br />
Then simply add the following to the startup script (e.g. {{filename|~/.xinitrc}}), changing the keycode ''113'' if necessary to the result gathered by the previous {{codeline|xmodmap}} command:<br />
xmodmap -e "keycode 113 = Super_L" # reassign Alt_R to Super_L<br />
xmodmap -e "remove mod1 = Super_L" # make sure X keeps it out of the mod1 group<br />
<br />
Now, any functions that are triggered by a Super_L (Windows) key press will also be triggered by an Alt_R key press.<br />
===Disable focus follows mouse behaviour===<br />
To disable focus follows mouse behaviour comment out the following line in definiton of struct handler in dwm.c <br />
<pre>[EnterNotify] = enternotify, </pre><br />
<br />
==Resources==<br />
* [http://www.suckless.org/dwm dwm's official website]<br />
* [[dmenu]] - Simple application launcher from the developers of dwm<br />
* The [http://bbs.archlinux.org/viewtopic.php?id=57549/ dwm thread] on the forums<br />
* [http://www.flickr.com/photos/cinderwick/sets/72157604733895131/ dwm wallpapers] and the forums' [http://bbs.archlinux.org/viewtopic.php?id=57768/ wallpaper thread] for a selection of dwm wallpapers<br />
* [http://www.xsnake.net/howto/dwm/dwm-eng.php HowTo by Snake]<br />
* [http://0x80.org/blog/?p=72 Moved to dwm]</div>Bharanideepanhttps://wiki.archlinux.org/index.php?title=Dwm&diff=96880Dwm2010-02-15T04:07:51Z<p>Bharanideepan: /* Patches & additional tiling modes Added information about 2 more tiling modes*/</p>
<hr />
<div>[[Category:Dynamic WMs (English)]]<br />
[[Category:HOWTOs (English)]]<br />
{{i18n|dwm}}<br />
{{Article summary start|Summary}}<br />
{{Article summary text|Information on installing dwm and increasing its potential}}<br />
{{Article summary heading|Related}}<br />
{{Article summary wiki|dmenu}}<br />
{{Article summary wiki|wmii}}<br />
{{Article summary end}}<br />
{{DISPLAYTITLE:dwm}}<br />
[http://dwm.suckless.org/ dwm] is a dynamic window manager for [[X]]. It manages windows in tiled, stacked, and full-screen layouts, as well as many others with the help of optional patches. Layouts can be applied dynamically, optimizing the environment for the application in use and the task performed. dwm is extremely lightweight and fast, written in C and with a stated design goal of remaining under 2000 source lines of code. It provides multi-head support for xrandr and Xinerama.<br />
<br />
==Installing==<br />
These instructions will install dwm using [[makepkg]] along with the Arch Build System, or [[ABS]] for short. This will allow reconfiguring it at a later time without complications. If only interested in installing dwm for a test drive, simply install the binary package from the repositories instead:<br />
# pacman -S dwm<br />
<br />
Note that by omitting compiling dwm from source a great deal of customizability is lost, since dwm's entire configuration is performed by editing its source code. Taking this in mind, the rest of the article assumes that dwm has been compiled from source as explained in the entirety of this section.<br />
<br />
===Requirements===<br />
Basic programming tools present in {{package Official|base-devel}} are needed in order to compile dwm and build a package for it, and the {{package Official|abs}} package is also a requisite for fetching the necessary build scripts:<br />
# pacman -S base-devel abs<br />
<br />
===Download build scripts with ABS===<br />
Once the required packages are installed, use ABS to fetch the latest build scripts from the repositories:<br />
# abs<br />
<br />
Lastly, copy the dwm build scripts from the ABS tree to a temporary directory. For example:<br />
$ cp -r /var/abs/community/dwm ~/dwm<br />
<br />
===Build and install package===<br />
Use {{Codeline|cd}} by switching to the directory containing the build scripts (the example above used {{Filename|~/dwm}}). Then run:<br />
$ makepkg -i<br />
<br />
This will compile dwm, build an Arch Linux package containing the resulting files, and install the package file all in one step. If problems are encountered, review the output for specific information. <br />
<br />
{{Tip|If this directory ({{filename|~/dwm}}) is saved, it can subsequently be used for making changes to the default configuration.}}<br />
<br />
==Configuring==<br />
dwm, as mentioned before, is exclusively configured at compile-time via some of its source files, namely {{Filename|config.h}} and {{Filename|config.mk}}. While the initial configuration provides a good set of defaults, it's realistic to expect that at some point potential users will probably want to make adjustments to their setups.<br />
<br />
===Method 1: ABS rebuild (recommended)===<br />
Modifying dwm is quite simple using this route.<br />
<br />
====Customizing config.h====<br />
Browse to the dwm source code directory saved during the [[#Installing|installation process]]; {{filename|~/dwm}} in the example. The {{filename|config.h}} found within this directory is where the general dwm preferences are stored. Most settings within the file should be self-explanatory, while others may not share the same trait. For detailed information on these settings, see the [http://www.suckless.org/dwm/ dwm website].<br />
<br />
{{note|Be sure to make a backup copy of config.h before modifying it, just in case something goes wrong.}}<br />
<br />
Once changes have been made, pipe the new md5sums into the [[PKGBUILD]]:<br />
$ makepkg -g >> PKGBUILD<br />
This will eliminate a checksum mismatch between the official config.h and the new revised copy.<br />
<br />
Now, compile and reinstall:<br />
$ makepkg -efi<br />
<br />
Assuming the configuration changes were valid, this command will compile dwm, build and reinstall the resulting package. If problems were encountered, review the output for specific information.<br />
<br />
Finally, restart dwm in order to apply the changes.<br />
<br />
====Notes====<br />
From now on, instead of updating the md5sums for every {{filename|config.h}} revision, which are known to become frequent, one may erase the md5sums array and build dwm with the {{codeline|--skipinteg}} option:<br />
$ makepkg -efi --skipinteg<br />
<br />
And after adding a few lines to dwm's start-up script, it is possible to [[#Restart dwm without logging out or closing programs|restart dwm without logging out or closing programs]].<br />
<br />
===Method 2: Mercurial (advanced)===<br />
dwm is maintained upstream within a [http://www.selenic.com/mercurial/wiki/ Mercurial] version control system at [http://hg.suckless.org/dwm suckless.org]. Those already familiar with Mercurial may find it more convenient to maintain configurations and patches within this system. A [http://www.suckless.org/dwm/customisation/patch_queue.html detailed tutorial] on this method is available at the dwm website.<br />
<br />
Before building dwm from the Mercurial sources, be sure to alter config.mk accordingly, because failure to do so may result in X crashes. Here are the values that need changing:<br />
<br />
Modify {{codeline|PREFIX}}:<br />
PREFIX = /usr<br />
The X11 include folder:<br />
X11INC = /usr/include/X11<br />
And the the X11 lib directory:<br />
X11LIB = /usr/lib/X11<br />
<br />
==Starting dwm==<br />
To start dwm with {{Codeline|startx}} or the [[SLIM]] login manager, simply append the following to {{Filename|~/.xinitrc}}: <br />
exec dwm<br />
<br />
For [[GDM]], add it to {{Filename|~/.Xclients}} instead, and select "Run XClient Script" from the Sessions menu.<br />
<br />
==Statusbar configuration==<br />
dwm uses {{Codeline|xsetroot -name}} to display information in its statusbar.<br />
<br />
===Basic statusbar===<br />
This example prints the date in [http://en.wikipedia.org/wiki/ISO_8601 ISO 8601] format. Add it to files {{filename|~/.xinitrc}} or {{filename|~/.Xclients}}:<br />
<pre><br />
while true; do<br />
xsetroot -name "$( date +"%F %R" )"<br />
sleep 1m # Update time every minute<br />
done &<br />
exec dwm<br />
</pre><br />
<br />
Here is an example intended for laptops that depends on the {{Package Official|acpi}} package for showing battery information:<br />
<pre><br />
while true ; do<br />
xsetroot -name "$( acpi -b | awk '{ print $3, $4 }' | tr -d ',' )"<br />
done &<br />
exec dwm<br />
</pre><br />
<br />
The script displays the amount of battery remaining besides its charging status by using the awk command to trim away the unneeded text from acpi, and tr to remove the commas.<br />
<br />
An alternative to the above is to selectively show the battery status depending on the current charging state:<br />
<pre><br />
while sleep 1m; do<br />
batt=`LC_ALL=C acpi -b`<br />
<br />
case $batt in<br />
*Discharging*) batt=${batt_main#* * * }; batt="${batt%%, *} " ;;<br />
*) batt='' ;;<br />
esac<br />
<br />
xsetroot -name "$batt`date +"%R"`"<br />
done &<br />
exec dwm<br />
</pre><br />
<br />
Finally, make sure there is only one instance of dwm in {{filename|~/.xinitrc}} or {{filename|~/.Xclients}}, so combining everything together should resemble this:<br />
~/.setbg<br />
autocutsel &<br />
termirssi &<br />
urxvt &<br />
<br />
while true; do<br />
xsetroot -name "$(date +"%F %R")"<br />
sleep 1m # Update time every minute<br />
done &<br />
'''exec dwm'''<br />
<br />
===Conky statusbar===<br />
Available from the [[AUR]], {{package AUR|conky-cli}} is a special build of conky which prints to <tt>stdout</tt>. If already accustomed to [[conky]], a statusbar rich with information can be ready within minutes. Once conky has been configured to preference, simply print it to the statusbar with {{Codeline|xsetroot -name}}:<br />
conky | while read -r; do xsetroot -name "$REPLY"; done &<br />
exec dwm<br />
<br />
The following is a sample conkyrc for a dual core CPU, displaying several stats:<br />
<pre><br />
background no<br />
out_to_console yes<br />
update_interval 2<br />
total_run_times 0<br />
use_spacer none<br />
<br />
TEXT<br />
$mpd_smart :: ${cpu cpu1}% / ${cpu cpu2}% ${loadavg 1} ${loadavg 2 3} :: ${acpitemp}c :: $memperc% ($mem) :: ${downspeed eth0}K/s ${upspeed eth0}K/s :: ${time %a %b %d %I:%M%P}<br />
</pre><br />
<br />
==Extended usage==<br />
<br />
===Patches & additional tiling modes===<br />
The official website is full of [http://www.suckless.org/dwm/patches patches] that can add extra functionality to dwm. Users can easily customize dwm by applying the modifications they like. The [http://www.suckless.org/dwm/patches/bottom_stack.html Bottom Stack] patch provides an additional tiling mode that splits the screen horizontally, as opposed to the default vertically oriented tiling mode.<br />
Very simmilar to this patch is bstack horizontal which further splits the tiles horizontally. <br />
<br />
The[http://dwm.suckless.org/patches/gapless_grid gaplessgrid patch] allows windows to be tiled like a grid.<br />
<br />
===Fixing gaps around terminal windows===<br />
If there are empty gaps of desktop space outside terminal windows, it is likely due to the terminal's font size. Either adjust the size until finding the ideal scale that closes the gap, or toggle {{Codeline|resizehints}} to ''False'' in {{filename|config.h}}:<br />
static Bool resizehints = False; /* False means respect size hints in tiled resizals */<br />
<br />
This will cause dwm to ignore resize requests from all client windows, not just terminals. The downside to this workaround is that some terminals may suffer redraw anomalies, such as ghost lines and premature line wraps, among others.<br />
<br />
====Urxvt====<br />
Another choice for [[urxvt]] users is applying the [[urxvt#Fix maximized window gaps|hints patch]] and regressing to dwm's original behaviour:<br />
static Bool resizehints = '''True''';<br />
<br />
===Restart dwm without logging out or closing programs===<br />
For restarting dwm without logging out or closing applications, change or add a startup script so that it loads dwm in a ''while'' loop, like this:<br />
<pre><br />
while true; do<br />
# Log stderror to a file <br />
dwm 2> ~/.dwm.log<br />
# No error logging<br />
#dwm >/dev/null 2>&1<br />
done<br />
</pre><br />
<br />
dwm can now be restarted without destroying other X windows by pressing the usual Mod-Shift-Q combination.<br />
<br />
It's a good idea to place the above startup script into a separate file, {{Filename|~/bin/startdwm}} for instance, and execute it through {{filename|~/.xinitrc}}. From this point on, when desiring to actually end the X session simply execute {{Codeline|killall startdwm}}, or bind it to a convenient key.<br />
<br />
===Make the right Alt key work as if it were Mod4 (Windows Key)===<br />
When using Mod4 (aka Super/Windows Key) as the {{codeline|MODKEY}}, it may be equally convenient to have the right Alt key (Alt_R) act as Mod4. This will allow performing otherwise awkward keystrokes one-handed, such as zooming with Alt_R+Enter. <br />
<br />
First, find out which keycode is assigned to Alt_R:<br />
xmodmap -pke | grep Alt_R<br />
<br />
Then simply add the following to the startup script (e.g. {{filename|~/.xinitrc}}), changing the keycode ''113'' if necessary to the result gathered by the previous {{codeline|xmodmap}} command:<br />
xmodmap -e "keycode 113 = Super_L" # reassign Alt_R to Super_L<br />
xmodmap -e "remove mod1 = Super_L" # make sure X keeps it out of the mod1 group<br />
<br />
Now, any functions that are triggered by a Super_L (Windows) key press will also be triggered by an Alt_R key press.<br />
<br />
==Resources==<br />
* [http://www.suckless.org/dwm dwm's official website]<br />
* [[dmenu]] - Simple application launcher from the developers of dwm<br />
* The [http://bbs.archlinux.org/viewtopic.php?id=57549/ dwm thread] on the forums<br />
* [http://www.flickr.com/photos/cinderwick/sets/72157604733895131/ dwm wallpapers] and the forums' [http://bbs.archlinux.org/viewtopic.php?id=57768/ wallpaper thread] for a selection of dwm wallpapers<br />
* [http://www.xsnake.net/howto/dwm/dwm-eng.php HowTo by Snake]<br />
* [http://0x80.org/blog/?p=72 Moved to dwm]</div>Bharanideepan