原文地址: http://ndever.net/articles/linux/install-openbox-ubuntu-1304-1310
openbox是我用过的轻量窗口中最好用的了。
需要安装下面的包. There's a myriad of other packages we could of used but these works for me:
在终端中运行:
sudo apt-get install openbox obmenu obconf tint2 volti xfce4-mixer xfce4-power-manager nitrogen clipit gmrun gksu dmenu
dmenu用来自定义keybinding,先安装上吧。
Nautilus doesn't play nicely with Openbox it likes to override the Openbox desktop with the Gnome desktop whenever its opened. To stop the Gnome desktop starting when nautilus starts paste this into the terminal.
sudo gsettings set org.gnome.desktop.background show-desktop-icons false; gsettings set org.gnome.desktop.background show-desktop-icons false;
Openbox runs a bash script each time you log in, simply add any applications you want to auto-start to this script.
mkdir ~/.config/openbox
然后
gedit ~/.config/openbox/autostart
and paste in.
## Openbox autostart ## ==================== ## Note*: some programs, such as 'nm-applet' are run via XDG auto-start. ## Run '/usr/lib/openbox/openbox-xdg-autostart --list' to list any ## XDG autostarted programs. ## GNOME PolicyKit and Keyring /usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1 & eval $(gnome-keyring-daemon -s --components=pkcs11,secrets,ssh,gpg) & #Starts Nitogen and restore wallpaper from previous session nitrogen --restore & # start up the tint2 task bar tint2 & # Start up power management xfce4-power-manager & # Start the Clipboard manager after 3 seconds wait (sleep 3s && clipit) & # start volume manager after 3 seconds (sleep 3s && volti) &
没有现成的logout解决方案,所以要自己用python脚本写一个。
终端:
gksudo gedit /usr/bin/cb-exit
paste in。
#!/usr/bin/env python import pygtk pygtk.require('2.0') import gtk import os import getpass class cb_exit: def disable_buttons(self): self.cancel.set_sensitive(False) self.logout.set_sensitive(False) self.suspend.set_sensitive(False) self.reboot.set_sensitive(False) self.shutdown.set_sensitive(False) def cancel_action(self,btn): self.disable_buttons() gtk.main_quit() def logout_action(self,btn): self.disable_buttons() self.status.set_label("Exiting Openbox, please standby...") os.system("openbox --exit") def suspend_action(self,btn): self.disable_buttons() self.status.set_label("Suspending, please standby...") os.system("cb-lock") os.system("dbus-send --system --print-reply --dest=\"org.freedesktop.UPower\" /org/freedesktop/UPower org.freedesktop.UPower.Suspend") gtk.main_quit() def reboot_action(self,btn): self.disable_buttons() self.status.set_label("Rebooting, please standby...") os.system("dbus-send --system --print-reply --dest=\"org.freedesktop.ConsoleKit\" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart") def shutdown_action(self,btn): self.disable_buttons() self.status.set_label("Shutting down, please standby...") os.system("dbus-send --system --print-reply --dest=\"org.freedesktop.ConsoleKit\" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop") def create_window(self): self.window = gtk.Window() title = "Log out " + getpass.getuser() + "? Choose an option:" self.window.set_title(title) self.window.set_border_width(5) self.window.set_size_request(500, 80) self.window.set_resizable(False) self.window.set_keep_above(True) self.window.stick self.window.set_position(1) self.window.connect("delete_event", gtk.main_quit) windowicon = self.window.render_icon(gtk.STOCK_QUIT, gtk.ICON_SIZE_MENU) self.window.set_icon(windowicon) #Create HBox for buttons self.button_box = gtk.HBox() self.button_box.show() #Cancel button self.cancel = gtk.Button(stock = gtk.STOCK_CANCEL) self.cancel.set_border_width(4) self.cancel.connect("clicked", self.cancel_action) self.button_box.pack_start(self.cancel) self.cancel.show() #Logout button self.logout = gtk.Button("_Log out") self.logout.set_border_width(4) self.logout.connect("clicked", self.logout_action) self.button_box.pack_start(self.logout) self.logout.show() #Suspend button self.suspend = gtk.Button("_Suspend") self.suspend.set_border_width(4) self.suspend.connect("clicked", self.suspend_action) self.button_box.pack_start(self.suspend) self.suspend.show() #Reboot button self.reboot = gtk.Button("_Reboot") self.reboot.set_border_width(4) self.reboot.connect("clicked", self.reboot_action) self.button_box.pack_start(self.reboot) self.reboot.show() #Shutdown button self.shutdown = gtk.Button("_Power off") self.shutdown.set_border_width(4) self.shutdown.connect("clicked", self.shutdown_action) self.button_box.pack_start(self.shutdown) self.shutdown.show() #Create HBox for status label self.label_box = gtk.HBox() self.label_box.show() self.status = gtk.Label() self.status.show() self.label_box.pack_start(self.status) #Create VBox and pack the above HBox's self.vbox = gtk.VBox() self.vbox.pack_start(self.button_box) self.vbox.pack_start(self.label_box) self.vbox.show() self.window.add(self.vbox) self.window.show() def __init__(self): self.create_window() def main(): gtk.main() if __name__ == "__main__": go = cb_exit() main()
don't forget to make cb-exit executable
sudo chmod +x /usr/bin/cb-exit
The Openbox menu system is probable the biggest challenge for new users. Unlike the old gnome menu system Openbox doesn't auto populate the menu with all your installed apps. Each item needs to be entered into an xml file either manually or via the GUI tool (obmenu).
The default menu is very basic so we'll replace it with something a little better.
gedit ~/.config/openbox/menu.xml
paste in.
<?xml version="1.0" encoding="UTF-8"?> <!-- Do not edit this file, it will be overwritten on install. Copy the file to $HOME/.config/openbox/ instead. --> <openbox_config xmlns="http://openbox.org/3.4/rc" xmlns:xi="http://www.w3.org/2001/XInclude"> <resistance> <strength>10</strength> <screen_edge_strength>20</screen_edge_strength> </resistance> <focus> <focusNew>yes</focusNew> <!-- always try to focus new windows when they appear. other rules do apply --> <followMouse>no</followMouse> <!-- move focus to a window when you move the mouse into it --> <focusLast>yes</focusLast> <!-- focus the last used window when changing desktops, instead of the one under the mouse pointer. when followMouse is enabled --> <underMouse>no</underMouse> <!-- move focus under the mouse, even when the mouse is not moving --> <focusDelay>200</focusDelay> <!-- when followMouse is enabled, the mouse must be inside the window for this many milliseconds (1000 = 1 sec) before moving focus to it --> <raiseOnFocus>no</raiseOnFocus> <!-- when followMouse is enabled, and a window is given focus by moving the mouse into it, also raise the window --> </focus> <placement> <policy>Smart</policy> <!-- 'Smart' or 'UnderMouse' --> <center>yes</center> <!-- whether to place windows in the center of the free area found or the top left corner --> <monitor>Primary</monitor> <!-- with Smart placement on a multi-monitor system, try to place new windows on: 'Any' - any monitor, 'Mouse' - where the mouse is, 'Active' - where the active window is, 'Primary' - only on the primary monitor --> <primaryMonitor>1</primaryMonitor> <!-- The monitor where Openbox should place popup dialogs such as the focus cycling popup, or the desktop switch popup. It can be an index from 1, specifying a particular monitor. Or it can be one of the following: 'Mouse' - where the mouse is, or 'Active' - where the active window is --> </placement> <theme> <name>Isawagorilla</name> <titleLayout>NLIMC</titleLayout> <!-- available characters are NDSLIMC, each can occur at most once. N: window icon L: window label (AKA title). I: iconify M: maximize C: close S: shade (roll up/down) D: omnipresent (on all desktops). --> <keepBorder>yes</keepBorder> <animateIconify>yes</animateIconify> <font place="ActiveWindow"> <name>sans</name> <size>8</size> <!-- font size in points --> <weight>bold</weight> <!-- 'bold' or 'normal' --> <slant>normal</slant> <!-- 'italic' or 'normal' --> </font> <font place="InactiveWindow"> <name>Sans</name> <size>8</size> <!-- font size in points --> <weight>Normal</weight> <!-- 'bold' or 'normal' --> <slant>Italic</slant> <!-- 'italic' or 'normal' --> </font> <font place="MenuHeader"> <name>sans</name> <size>9</size> <!-- font size in points --> <weight>normal</weight> <!-- 'bold' or 'normal' --> <slant>normal</slant> <!-- 'italic' or 'normal' --> </font> <font place="MenuItem"> <name>sans</name> <size>9</size> <!-- font size in points --> <weight>normal</weight> <!-- 'bold' or 'normal' --> <slant>normal</slant> <!-- 'italic' or 'normal' --> </font> <font place="ActiveOnScreenDisplay"> <name>sans</name> <size>9</size> <!-- font size in points --> <weight>bold</weight> <!-- 'bold' or 'normal' --> <slant>normal</slant> <!-- 'italic' or 'normal' --> </font> <font place="InactiveOnScreenDisplay"> <name>sans</name> <size>9</size> <!-- font size in points --> <weight>bold</weight> <!-- 'bold' or 'normal' --> <slant>normal</slant> <!-- 'italic' or 'normal' --> </font> </theme> <desktops> <!-- this stuff is only used at startup, pagers allow you to change them during a session these are default values to use when other ones are not already set by other applications, or saved in your session use obconf if you want to change these without having to log out and back in --> <number>4</number> <firstdesk>1</firstdesk> <names> <!-- set names up here if you want to, like this: <name>desktop 1</name> <name>desktop 2</name> --> </names> <popupTime>875</popupTime> <!-- The number of milliseconds to show the popup for when switching desktops. Set this to 0 to disable the popup. --> </desktops> <resize> <drawContents>yes</drawContents> <popupShow>Nonpixel</popupShow> <!-- 'Always', 'Never', or 'Nonpixel' (xterms and such) --> <popupPosition>Center</popupPosition> <!-- 'Center', 'Top', or 'Fixed' --> <popupFixedPosition> <!-- these are used if popupPosition is set to 'Fixed' --> <x>10</x> <!-- positive number for distance from left edge, negative number for distance from right edge, or 'Center' --> <y>10</y> <!-- positive number for distance from top edge, negative number for distance from bottom edge, or 'Center' --> </popupFixedPosition> </resize> <!-- You can reserve a portion of your screen where windows will not cover when they are maximized, or when they are initially placed. Many programs reserve space automatically, but you can use this in other cases. --> <margins> <top>0</top> <bottom>0</bottom> <left>0</left> <right>0</right> </margins> <dock> <position>TopLeft</position> <!-- (Top|Bottom)(Left|Right|)|Top|Bottom|Left|Right|Floating --> <floatingX>0</floatingX> <floatingY>0</floatingY> <noStrut>no</noStrut> <stacking>Above</stacking> <!-- 'Above', 'Normal', or 'Below' --> <direction>Vertical</direction> <!-- 'Vertical' or 'Horizontal' --> <autoHide>no</autoHide> <hideDelay>300</hideDelay> <!-- in milliseconds (1000 = 1 second) --> <showDelay>300</showDelay> <!-- in milliseconds (1000 = 1 second) --> <moveButton>Middle</moveButton> <!-- 'Left', 'Middle', 'Right' --> </dock> <keyboard> <chainQuitKey>C-g</chainQuitKey> <!-- Keybindings for desktop switching --> <keybind key="C-A-Left"> <action name="GoToDesktop"> <to>left</to> <wrap>no</wrap> </action> </keybind> <keybind key="C-A-Right"> <action name="GoToDesktop"> <to>right</to> <wrap>no</wrap> </action> </keybind> <keybind key="C-A-Up"> <action name="GoToDesktop"> <to>up</to> <wrap>no</wrap> </action> </keybind> <keybind key="C-A-Down"> <action name="GoToDesktop"> <to>down</to> <wrap>no</wrap> </action> </keybind> <keybind key="S-A-Left"> <action name="SendToDesktop"> <to>left</to> <wrap>no</wrap> </action> </keybind> <keybind key="S-A-Right"> <action name="SendToDesktop"> <to>right</to> <wrap>no</wrap> </action> </keybind> <keybind key="S-A-Up"> <action name="SendToDesktop"> <to>up</to> <wrap>no</wrap> </action> </keybind> <keybind key="S-A-Down"> <action name="SendToDesktop"> <to>down</to> <wrap>no</wrap> </action> </keybind> <keybind key="W-F1"> <action name="GoToDesktop"> <to>1</to> </action> </keybind> <keybind key="W-F2"> <action name="GoToDesktop"> <to>2</to> </action> </keybind> <keybind key="W-F3"> <action name="GoToDesktop"> <to>3</to> </action> </keybind> <keybind key="W-F4"> <action name="GoToDesktop"> <to>4</to> </action> </keybind> <keybind key="W-d"> <action name="ToggleShowDesktop"/> </keybind> <!-- Keybindings for windows --> <keybind key="A-F4"> <action name="Close"/> </keybind> <keybind key="A-Escape"> <action name="Lower"/> <action name="FocusToBottom"/> <action name="Unfocus"/> </keybind> <keybind key="A-space"> <action name="ShowMenu"> <menu>client-menu</menu> </action> </keybind> <!-- Take a screenshot of the current window with gnome-screenshot when Alt+Print are pressed --> <keybind key="A-Print"> <action name="Execute"> <command>gnome-screenshot -w</command> </action> </keybind> <!-- Keybindings for window switching --> <keybind key="A-Tab"> <action name="NextWindow"> <finalactions> <action name="Focus"/> <action name="Raise"/> <action name="Unshade"/> </finalactions> </action> </keybind> <keybind key="A-S-Tab"> <action name="PreviousWindow"> <finalactions> <action name="Focus"/> <action name="Raise"/> <action name="Unshade"/> </finalactions> </action> </keybind> <keybind key="C-A-Tab"> <action name="NextWindow"> <panels>yes</panels> <desktop>yes</desktop> <finalactions> <action name="Focus"/> <action name="Raise"/> <action name="Unshade"/> </finalactions> </action> </keybind> <!-- Keybindings for window switching with the arrow keys --> <keybind key="W-S-Right"> <action name="DirectionalCycleWindows"> <direction>right</direction> </action> </keybind> <keybind key="W-S-Left"> <action name="DirectionalCycleWindows"> <direction>left</direction> </action> </keybind> <keybind key="W-S-Up"> <action name="DirectionalCycleWindows"> <direction>up</direction> </action> </keybind> <keybind key="W-S-Down"> <action name="DirectionalCycleWindows"> <direction>down</direction> </action> </keybind> <!-- my define --> <!-- Keybindings for running applications --> <keybind key="A-F2"> <action name="Execute"> <startupnotify> <enabled>true</enabled> <name>Run Program</name> </startupnotify> <command>gmrun</command> </action> </keybind> <keybind key="A-F3"> <action name="Execute"> <startupnotify> <enabled>true</enabled> <name>dmenu-bind</name> </startupnotify> <command>~/.config/dmenu/dmenu-bind.sh</command> </action> </keybind> <keybind key="W-f"> <action name="Execute"> <startupnotify> <enabled>true</enabled> <name>nautilus</name> </startupnotify> <command>nautilus</command> </action> </keybind> <keybind key="W-t"> <action name="Execute"> <startupnotify> <enabled>true</enabled> <name>Terminal</name> </startupnotify> <command>gnome-terminal</command> </action> </keybind> <keybind key="W-w"> <action name="Execute"> <startupnotify> <enabled>true</enabled> <name>Web Browser</name> </startupnotify> <command>x-www-browser</command> </action> </keybind> <keybind key="W-e"> <action name="Execute"> <startupnotify> <enabled>true</enabled> <name>Editor</name> </startupnotify> <command>gedit</command> </action> </keybind> <keybind key="W-x"> <action name="Execute"> <startupnotify> <enabled>true</enabled> <name>Logout</name> </startupnotify> <command>cb-exit</command> </action> </keybind> <keybind key="W-Tab"> <action name="ShowMenu"> <menu>client-list-combined-menu</menu> </action> </keybind> <keybind key="W-space"> <action name="ShowMenu"> <menu>root-menu</menu> </action> </keybind> <!-- A bit of tiling --> <keybind key="W-Right"> <action name="GrowToEdgeEast"/> </keybind> <keybind key="W-Left"> <action name="GrowToEdgeWest"/> </keybind> <keybind key="W-Down"> <action name="GrowToEdgeSouth"/> </keybind> <keybind key="W-Up"> <action name="GrowToEdgeNorth"/> </keybind> <keybind key="W-A-Left"> <action name="Execute"> <command>cb-aerosnap --left</command> </action> </keybind> <keybind key="W-A-Right"> <action name="Execute"> <command>cb-aerosnap --right</command> </action> </keybind> <!-- Keybindings for running applications --> <!-- Launch gnome-screenshot when Print is pressed --> <keybind key="Print"> <action name="Execute"> <command>gnome-screenshot</command> </action> </keybind> </keyboard> <mouse> <dragThreshold>1</dragThreshold> <!-- number of pixels the mouse must move before a drag begins --> <doubleClickTime>200</doubleClickTime> <!-- in milliseconds (1000 = 1 second) --> <screenEdgeWarpTime>400</screenEdgeWarpTime> <!-- Time before changing desktops when the pointer touches the edge of the screen while moving a window, in milliseconds (1000 = 1 second). Set this to 0 to disable warping --> <screenEdgeWarpMouse>false</screenEdgeWarpMouse> <!-- Set this to TRUE to move the mouse pointer across the desktop when switching due to hitting the edge of the screen --> <context name="Frame"> <mousebind button="A-Left" action="Press"> <action name="Focus"/> <action name="Raise"/> </mousebind> <mousebind button="A-Left" action="Click"> <action name="Unshade"/> </mousebind> <mousebind button="A-Left" action="Drag"> <action name="Move"/> </mousebind> <mousebind button="A-Right" action="Press"> <action name="Focus"/> <action name="Raise"/> <action name="Unshade"/> </mousebind> <mousebind button="A-Right" action="Drag"> <action name="Resize"/> </mousebind> <mousebind button="A-Middle" action="Press"> <action name="Lower"/> <action name="FocusToBottom"/> <action name="Unfocus"/> </mousebind> <mousebind button="A-Up" action="Click"> <action name="GoToDesktop"> <to>previous</to> </action> </mousebind> <mousebind button="A-Down" action="Click"> <action name="GoToDesktop"> <to>next</to> </action> </mousebind> <mousebind button="C-A-Up" action="Click"> <action name="GoToDesktop"> <to>previous</to> </action> </mousebind> <mousebind button="C-A-Down" action="Click"> <action name="GoToDesktop"> <to>next</to> </action> </mousebind> <mousebind button="A-S-Up" action="Click"> <action name="SendToDesktop"> <to>previous</to> </action> </mousebind> <mousebind button="A-S-Down" action="Click"> <action name="SendToDesktop"> <to>next</to> </action> </mousebind> </context> <context name="Titlebar"> <mousebind button="Left" action="Drag"> <action name="Move"/> </mousebind> <mousebind button="Left" action="DoubleClick"> <action name="ToggleMaximize"/> </mousebind> <mousebind button="Up" action="Click"> <action name="if"> <shaded>no</shaded> <then> <action name="Shade"/> <action name="FocusToBottom"/> <action name="Unfocus"/> <action name="Lower"/> </then> </action> </mousebind> <mousebind button="Down" action="Click"> <action name="if"> <shaded>yes</shaded> <then> <action name="Unshade"/> <action name="Raise"/> </then> </action> </mousebind> </context> <context name="Titlebar Top Right Bottom Left TLCorner TRCorner BRCorner BLCorner"> <mousebind button="Left" action="Press"> <action name="Focus"/> <action name="Raise"/> <action name="Unshade"/> </mousebind> <mousebind button="Middle" action="Press"> <action name="Lower"/> <action name="FocusToBottom"/> <action name="Unfocus"/> </mousebind> <mousebind button="Right" action="Press"> <action name="Focus"/> <action name="Raise"/> <action name="ShowMenu"> <menu>client-menu</menu> </action> </mousebind> </context> <context name="Top"> <mousebind button="Left" action="Drag"> <action name="Resize"> <edge>top</edge> </action> </mousebind> </context> <context name="Left"> <mousebind button="Left" action="Drag"> <action name="Resize"> <edge>left</edge> </action> </mousebind> </context> <context name="Right"> <mousebind button="Left" action="Drag"> <action name="Resize"> <edge>right</edge> </action> </mousebind> </context> <context name="Bottom"> <mousebind button="Left" action="Drag"> <action name="Resize"> <edge>bottom</edge> </action> </mousebind> <mousebind button="Right" action="Press"> <action name="Focus"/> <action name="Raise"/> <action name="ShowMenu"> <menu>client-menu</menu> </action> </mousebind> </context> <context name="TRCorner BRCorner TLCorner BLCorner"> <mousebind button="Left" action="Press"> <action name="Focus"/> <action name="Raise"/> <action name="Unshade"/> </mousebind> <mousebind button="Left" action="Drag"> <action name="Resize"/> </mousebind> </context> <context name="Client"> <mousebind button="Left" action="Press"> <action name="Focus"/> <action name="Raise"/> </mousebind> <mousebind button="Middle" action="Press"> <action name="Focus"/> <action name="Raise"/> </mousebind> <mousebind button="Right" action="Press"> <action name="Focus"/> <action name="Raise"/> </mousebind> </context> <context name="Icon"> <mousebind button="Left" action="Press"> <action name="Focus"/> <action name="Raise"/> <action name="Unshade"/> <action name="ShowMenu"> <menu>client-menu</menu> </action> </mousebind> <mousebind button="Right" action="Press"> <action name="Focus"/> <action name="Raise"/> <action name="ShowMenu"> <menu>client-menu</menu> </action> </mousebind> </context> <context name="AllDesktops"> <mousebind button="Left" action="Press"> <action name="Focus"/> <action name="Raise"/> <action name="Unshade"/> </mousebind> <mousebind button="Left" action="Click"> <action name="ToggleOmnipresent"/> </mousebind> </context> <context name="Shade"> <mousebind button="Left" action="Press"> <action name="Focus"/> <action name="Raise"/> </mousebind> <mousebind button="Left" action="Click"> <action name="ToggleShade"/> </mousebind> </context> <context name="Iconify"> <mousebind button="Left" action="Press"> <action name="Focus"/> <action name="Raise"/> </mousebind> <mousebind button="Left" action="Click"> <action name="Iconify"/> </mousebind> </context> <context name="Maximize"> <mousebind button="Left" action="Press"> <action name="Focus"/> <action name="Raise"/> <action name="Unshade"/> </mousebind> <mousebind button="Middle" action="Press"> <action name="Focus"/> <action name="Raise"/> <action name="Unshade"/> </mousebind> <mousebind button="Right" action="Press"> <action name="Focus"/> <action name="Raise"/> <action name="Unshade"/> </mousebind> <mousebind button="Left" action="Click"> <action name="ToggleMaximize"/> </mousebind> <mousebind button="Middle" action="Click"> <action name="ToggleMaximize"> <direction>vertical</direction> </action> </mousebind> <mousebind button="Right" action="Click"> <action name="ToggleMaximize"> <direction>horizontal</direction> </action> </mousebind> </context> <context name="Close"> <mousebind button="Left" action="Press"> <action name="Focus"/> <action name="Raise"/> <action name="Unshade"/> </mousebind> <mousebind button="Left" action="Click"> <action name="Close"/> </mousebind> </context> <context name="Desktop"> <mousebind button="Up" action="Click"> <action name="GoToDesktop"> <to>previous</to> </action> </mousebind> <mousebind button="Down" action="Click"> <action name="GoToDesktop"> <to>next</to> </action> </mousebind> <mousebind button="A-Up" action="Click"> <action name="GoToDesktop"> <to>previous</to> </action> </mousebind> <mousebind button="A-Down" action="Click"> <action name="GoToDesktop"> <to>next</to> </action> </mousebind> <mousebind button="C-A-Up" action="Click"> <action name="GoToDesktop"> <to>previous</to> </action> </mousebind> <mousebind button="C-A-Down" action="Click"> <action name="GoToDesktop"> <to>next</to> </action> </mousebind> <mousebind button="Left" action="Press"> <action name="Focus"/> <action name="Raise"/> </mousebind> <mousebind button="Right" action="Press"> <action name="Focus"/> <action name="Raise"/> </mousebind> </context> <context name="Root"> <!-- Menus --> <mousebind button="Middle" action="Press"> <action name="ShowMenu"> <menu>client-list-combined-menu</menu> </action> </mousebind> <mousebind button="Right" action="Press"> <action name="ShowMenu"> <menu>root-menu</menu> </action> </mousebind> </context> <context name="MoveResize"> <mousebind button="Up" action="Click"> <action name="GoToDesktop"> <to>previous</to> </action> </mousebind> <mousebind button="Down" action="Click"> <action name="GoToDesktop"> <to>next</to> </action> </mousebind> <mousebind button="A-Up" action="Click"> <action name="GoToDesktop"> <to>previous</to> </action> </mousebind> <mousebind button="A-Down" action="Click"> <action name="GoToDesktop"> <to>next</to> </action> </mousebind> </context> </mouse> <menu> <!-- You can specify more than one menu file in here and they are all loaded, just don't make menu ids clash or, well, it'll be kind of pointless --> <!-- default menu file (or custom one in $HOME/.config/openbox/) --> <!-- system menu files on Debian systems --> <file>/var/lib/openbox/debian-menu.xml</file> <file>menu.xml</file> <hideDelay>200</hideDelay> <!-- if a press-release lasts longer than this setting (in milliseconds), the menu is hidden again --> <middle>no</middle> <!-- center submenus vertically about the parent entry --> <submenuShowDelay>100</submenuShowDelay> <!-- time to delay before showing a submenu after hovering over the parent entry. if this is a negative value, then the delay is infinite and the submenu will not be shown until it is clicked on --> <submenuHideDelay>400</submenuHideDelay> <!-- time to delay before hiding a submenu when selecting another entry in parent menu if this is a negative value, then the delay is infinite and the submenu will not be hidden until a different submenu is opened --> <applicationIcons>yes</applicationIcons> <!-- controls if icons appear in the client-list-(combined-)menu --> <manageDesktops>yes</manageDesktops> <!-- show the manage desktops section in the client-list-(combined-)menu --> </menu> <applications> <!-- # this is an example with comments through out. use these to make your # own rules, but without the comments of course. # you may use one or more of the name/class/role/title/type rules to specify # windows to match <application name="the window's _OB_APP_NAME property (see obxprop)" class="the window's _OB_APP_CLASS property (see obxprop)" role="the window's _OB_APP_ROLE property (see obxprop)" title="the window's _OB_APP_TITLE property (see obxprop)" type="the window's _OB_APP_TYPE property (see obxprob).. (if unspecified, then it is 'dialog' for child windows)"> # you may set only one of name/class/role/title/type, or you may use more # than one together to restrict your matches. # the name, class, role, and title use simple wildcard matching such as those # used by a shell. you can use * to match any characters and ? to match # any single character. # the type is one of: normal, dialog, splash, utility, menu, toolbar, dock, # or desktop # when multiple rules match a window, they will all be applied, in the # order that they appear in this list # each rule element can be left out or set to 'default' to specify to not # change that attribute of the window <decor>yes</decor> # enable or disable window decorations <shade>no</shade> # make the window shaded when it appears, or not <position force="no"> # the position is only used if both an x and y coordinate are provided # (and not set to 'default') # when force is "yes", then the window will be placed here even if it # says you want it placed elsewhere. this is to override buggy # applications who refuse to behave <x>center</x> # a number like 50, or 'center' to center on screen. use a negative number # to start from the right (or bottom for <y>), ie -50 is 50 pixels from the # right edge (or bottom). <y>200</y> <monitor>1</monitor> # specifies the monitor in a xinerama setup. # 1 is the first head, or 'mouse' for wherever the mouse is </position> <focus>yes</focus> # if the window should try be given focus when it appears. if this is set # to yes it doesn't guarantee the window will be given focus. some # restrictions may apply, but Openbox will try to <desktop>1</desktop> # 1 is the first desktop, 'all' for all desktops <layer>normal</layer> # 'above', 'normal', or 'below' <iconic>no</iconic> # make the window iconified when it appears, or not <skip_pager>no</skip_pager> # asks to not be shown in pagers <skip_taskbar>no</skip_taskbar> # asks to not be shown in taskbars. window cycling actions will also # skip past such windows <fullscreen>yes</fullscreen> # make the window in fullscreen mode when it appears <maximized>true</maximized> # 'Horizontal', 'Vertical' or boolean (yes/no) </application> # end of the example --> </applications> </openbox_config>
Don't forget to install & config "bmenu"
安装使用轻量启动器dmenu,来支持keybinding
sudo apt-get install dmenu
sudo mkdir ~/.config/dmenu sudo gedit ~/.config/dmenu/dmenu-bind.sh
#!/bin/bash exe=`dmenu_path | dmenu -b -nb '#151617' -nf '#d8d8d8' -sb '#d8d8d8' -sf '#151617'` && eval "exec $exe"
make dmenu-bind.sh to executable
sudo chmod +x ~/.config/dmenu/dmenu-bind.sh
最后,任何时候 你都可以用
gedit ~/.config/openbox/menu.xml
或用
obmenu
来修改GUI menu(root-menu)
Tint2 is themed and configure via ~/.config/tint2/tint2rc. It's fairly self explanatory however the tint2 documentation is well worth a read or you can get some ideas on the Archbang tint2rc thread.
We'll replace the default tint2 config with something better.
Create the Tint2 config directory.
mkdir ~/.config/tint2
then
gedit ~/.config/tint2/tint2rc
paste in
# Tint2 config file # Background definitions # ID 1 rounded = 0 border_width = 0 background_color = #000000 100 border_color = #FFFFFF 100 # ID 2 rounded = 0 border_width = 0 background_color = #000000 100 border_color = #FFFFFF 100 # Panel panel_monitor = all panel_position = bottom left horizontal panel_size = 0 40 panel_margin = 0 0 panel_padding = 0 0 panel_dock = 0 wm_menu = 0 panel_background_id = 0 # Taskbar taskbar_mode = single_desktop taskbar_padding = 0 0 0 taskbar_background_id = 0 #taskbar_active_background_id = 0 # Tasks urgent_nb_of_blink = 7 task_icon = 1 task_text = 1 task_centered = 1 task_maximum_size = 200 32 task_padding = 0 0 task_background_id = 0 task_active_background_id = 0 task_icon_hsb = 0 0 0 task_active_icon_hsb = 0 0 0 # Fonts task_font = Sans 10 task_font_color = #FFFFFF 100 task_active_font_color = #FFFFFF 100 font_shadow = 0 # Systray systray_padding = 0 0 0 systray_sort = asc systray_background_id = 0 # Clock time1_format = %H:%M time1_font = Sans 10 time2_format = %a %d %b time2_font = Sans 10 clock_font_color = #FFFFFF 100 clock_padding = 0 0 clock_background_id = 0 # Mouse mouse_middle = none mouse_right = none mouse_scroll_up = none mouse_scroll_down = none # Battery battery = 0 battery_low_status = 20 battery_low_cmd = notify-send "battery low" bat1_font = Sans 10 bat2_font = Sans 10 battery_font_color = #FFFFFF 100 battery_padding = 0 0 battery_background_id = 0 # End of config
The default Openbox themes aren't great. You can find something more up to date at Boxlook or DeviantART.
Once you'r download a theme place it into either ~/.themes or /usr/share/themes.
Now run.
obconf
I used to use lxappearance to set GTK themes however as of 12.10 it seems to be broken. For now its got to be done manually.
Again the themes go into either ~/.themes or /usr/share/themes.
gedit ~/.gtkrc-2.0
|
gtk-theme-name=
"Ambiance"
gtk-icon-theme-name=
"Humanity"
gtk-font-name=
"Ubuntu 11"
gtk-cursor-theme-name=
"DMZ-White"
gtk-cursor-theme-size=0
gtk-toolbar-style=GTK_TOOLBAR_ICONS
gtk-toolbar-icon-size=GTK_ICON_SIZE_SMALL_TOOLBAR
gtk-button-images=1
gtk-menu-images=1
gtk-
enable
-event-sounds=0
gtk-
enable
-input-feedback-sounds=0
gtk-xft-antialias=1
gtk-xft-hinting=1
gtk-xft-hintstyle=
"hintslight"
gtk-xft-rgba=
"rgb"
|
Change the value of gtk-theme-name to you'r themes name.
gtk-theme-name=
"YOURTHEMENAME"
|
Yet again the themes go into either ~/.themes or /usr/share/themes.
gedit ~/.config
/gtk-3
.0
/settings
.ini
|
[Settings]
gtk-theme-name=Ambiance
gtk-icon-theme-name=Humanity
gtk-font-name=Ubuntu 11
gtk-cursor-theme-name=DMZ-White
gtk-cursor-theme-size=0
gtk-toolbar-style=GTK_TOOLBAR_ICONS
gtk-toolbar-icon-size=GTK_ICON_SIZE_SMALL_TOOLBAR
gtk-button-images=1
gtk-menu-images=1
gtk-
enable
-event-sounds=0
gtk-
enable
-input-feedback-sounds=0
gtk-xft-antialias=1
gtk-xft-hinting=1
gtk-xft-hintstyle=hintslight
gtk-xft-rgba=rgb
|
Change the value of gtk-theme-name to you'r themes name.
gtk-theme-name=YOURTHEMENAME
|
nitrogen
|
Select "preferences" and add the directory where you'r wallpapers live.
double click the image you'd like and click apply.
You'r auto-start script will restore this each time you log in.
Install numlockx
sudo
apt-get
install
numlockx
|
Open auto-start
gedit ~/.config
/openbox/autostart
|
Add to auto-start.
# Turn on Numlock at start-up
numlockx on &
|
sudo
apt-get
install
xcompmgr
|
Open auto-start.
gedit ~/.config
/openbox/autostart
|
Add xcompmgr to auto-start.
# Start Composite manager
xcompmgr -c -t-5 -l-5 -r4.2 -o.55 &
|
To install the x screensaver
sudo
apt-get
install
xscreensaver xscreensaver-gl xscreensaver-gl
|
Open auto-start.
gedit ~/.config
/openbox/autostart
|
Add xscreensaver to auto-start.
# Start screensaver
xscreensaver -no-splash &
|
xscreensaver-demo
|
As far as I'm aware there are no up to date Openbox resources dedicated to Ubuntu but the bellow are really great Openbox resources for other distros just be aware that some aspects of the guides are distribution specific.