Is Awesome Stable?

Hi,
I am in the process of testing some window managers as alternatives to Openbox and I would like to have the opinion of Archers about Awesome.
My concern is that I often hear of frequent breakages of the configuration files and I really don't want to start using, modyfing and customizing a WM that isn't stable. I don't have too much spare time and I need something that doesn't break at every update.
What I like about Awesome is that it seems very flexible and integrates lots of features other tiling WMs don't have, but I would like to be sure that once configured for the first time I can just keep using it rather than keep reconfiguring it.
So, present and past Awesome users, what is your opinion?
Thank you.

I've been using Awesome for a few months now and once you get used to its programmable configuration with lua, it's mind-boggling what you can achieve with it. The change from version 3.4.4 to 3.4.5 was trivial and caused me no trouble, although I appreciate how earlier rapid developments in configuration were much more frustrating.
Awesome has been very stable for me, and only a few minor bugs have arisen regarding titlebars and slightly increased memory usage - easily reduced by restarting Awesome with a keystoke on the odd occasion.
As an Openbox user for some time, I still have both WMs available, but Awesome has become my standard as it is so configurable.

Similar Messages

  • Awesome not reading rc.lua

    I'm trying to give awesome3.1 a go, but it isn't reading my rc.lua. It just keeps the default everything. Really all I've changed is the theme.
    -- Include awesome libraries, with lots of useful function!
    require("awful")
    require("beautiful")
    -- {{{ Variable definitions
    -- Themes define colours, icons, and wallpapers
    theme_path = "/home/shawn/.config/awesome/theme"
    -- Actually load theme
    beautiful.init(theme_path)
    -- This is used later as the default terminal and editor to run.
    terminal = "xterm"
    editor = os.getenv("EDITOR") or "vi"
    editor_cmd = terminal .. " -e " .. editor
    -- Default modkey.
    -- Usually, Mod4 is the key with a logo between Control and Alt.
    -- If you do not like this or do not have such a key,
    -- I suggest you to remap Mod4 to another key using xmodmap or other tools.
    -- However, you can use another modifier like Mod1, but it may interact with others.
    modkey = "Mod4"
    -- Table of layouts to cover with awful.layout.inc, order matters.
    layouts =
    "tile",
    "tileleft",
    "tilebottom",
    "tiletop",
    "fairh",
    "fairv",
    "magnifier",
    "max",
    "fullscreen",
    "spiral",
    "dwindle",
    "floating"
    -- Table of clients that should be set floating. The index may be either
    -- the application class or instance. The instance is useful when running
    -- a console app in a terminal like (Music on Console)
    -- xterm -name mocp -e mocp
    floatapps =
    -- by class
    ["MPlayer"] = true,
    ["pinentry"] = true,
    ["gimp"] = true,
    -- by instance
    ["mocp"] = true
    -- Applications to be moved to a pre-defined tag by class or instance.
    -- Use the screen and tags indices.
    apptags =
    -- ["Firefox"] = { screen = 1, tag = 2 },
    -- ["mocp"] = { screen = 2, tag = 4 },
    -- Define if we want to use titlebar on all applications.
    use_titlebar = false
    -- {{{ Tags
    -- Define tags table.
    tags = {}
    for s = 1, screen.count() do
    -- Each screen has its own tag table.
    tags[s] = {}
    -- Create 9 tags per screen.
    for tagnumber = 1, 3 do
    tags[s][tagnumber] = tag({ name = tag_settings[tagnumber].name, layout = tag_settings[tagnumber].layouts })
    -- Add tags to screen one by one
    tags[s][tagnumber].screen = s
    end
    -- I'm sure you want to see at least one tag.
    tags[s][1].selected = true
    end
    tag_settings = {
    { name="main", layout=layouts[1] },
    { name="work", layout=layouts[1] },
    { name="float", layout=layouts[12] }
    -- {{{ Wibox
    -- Create a textbox widget
    mytextbox = widget({ type = "textbox", align = "right" })
    -- Set the default text in textbox
    mytextbox.text = "<b><small> " .. AWESOME_RELEASE .. " </small></b>"
    -- Create a laucher widget and a main menu
    myawesomemenu = {
    { "manual", terminal .. " -e man awesome" },
    { "edit config", editor_cmd .. " " .. awful.util.getdir("config") .. "/rc.lua" },
    { "restart", awesome.restart },
    { "quit", awesome.quit }
    mymainmenu = awful.menu.new({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
    { "open terminal", terminal }
    mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon,
    menu = mymainmenu })
    -- Create a systray
    mysystray = widget({ type = "systray", align = "right" })
    -- Create a wibox for each screen and add it
    mywibox = {}
    mypromptbox = {}
    mylayoutbox = {}
    mytaglist = {}
    mytaglist.buttons = { button({ }, 1, awful.tag.viewonly),
    button({ modkey }, 1, awful.client.movetotag),
    button({ }, 3, function (tag) tag.selected = not tag.selected end),
    button({ modkey }, 3, awful.client.toggletag),
    button({ }, 4, awful.tag.viewnext),
    button({ }, 5, awful.tag.viewprev) }
    mytasklist = {}
    mytasklist.buttons = { button({ }, 1, function (c) client.focus = c; c:raise() end),
    button({ }, 3, function () awful.menu.clients({ width=250 }) end),
    button({ }, 4, function () awful.client.focus.byidx(1) end),
    button({ }, 5, function () awful.client.focus.byidx(-1) end) }
    for s = 1, screen.count() do
    -- Create a promptbox for each screen
    mypromptbox[s] = widget({ type = "textbox", align = "left" })
    -- Create an imagebox widget which will contains an icon indicating which layout we're using.
    -- We need one layoutbox per screen.
    mylayoutbox[s] = widget({ type = "imagebox", align = "right" })
    mylayoutbox[s]:buttons({ button({ }, 1, function () awful.layout.inc(layouts, 1) end),
    button({ }, 3, function () awful.layout.inc(layouts, -1) end),
    button({ }, 4, function () awful.layout.inc(layouts, 1) end),
    button({ }, 5, function () awful.layout.inc(layouts, -1) end) })
    -- Create a taglist widget
    mytaglist[s] = awful.widget.taglist.new(s, awful.widget.taglist.label.all, mytaglist.buttons)
    -- Create a tasklist widget
    mytasklist[s] = awful.widget.tasklist.new(function(c)
    return awful.widget.tasklist.label.currenttags(c, s)
    end, mytasklist.buttons)
    -- Create the wibox
    mywibox[s] = wibox({ position = "top", fg = beautiful.fg_normal, bg = beautiful.bg_normal })
    -- Add widgets to the wibox - order matters
    mywibox[s].widgets = { mylauncher,
    mytaglist[s],
    mytasklist[s],
    mypromptbox[s],
    mytextbox,
    mylayoutbox[s],
    s == 1 and mysystray or nil }
    mywibox[s].screen = s
    end
    -- {{{ Mouse bindings
    awesome.buttons({
    button({ }, 3, function () mymainmenu:toggle() end),
    button({ }, 4, awful.tag.viewnext),
    button({ }, 5, awful.tag.viewprev)
    -- {{{ Key bindings
    -- Bind keyboard digits
    -- Compute the maximum number of digit we need, limited to 9
    keynumber = 0
    for s = 1, screen.count() do
    keynumber = math.min(9, math.max(#tags[s], keynumber));
    end
    for i = 1, keynumber do
    keybinding({ modkey }, i,
    function ()
    local screen = mouse.screen
    if tags[screen][i] then
    awful.tag.viewonly(tags[screen][i])
    end
    end):add()
    keybinding({ modkey, "Control" }, i,
    function ()
    local screen = mouse.screen
    if tags[screen][i] then
    tags[screen][i].selected = not tags[screen][i].selected
    end
    end):add()
    keybinding({ modkey, "Shift" }, i,
    function ()
    if client.focus then
    if tags[client.focus.screen][i] then
    awful.client.movetotag(tags[client.focus.screen][i])
    end
    end
    end):add()
    keybinding({ modkey, "Control", "Shift" }, i,
    function ()
    if client.focus then
    if tags[client.focus.screen][i] then
    awful.client.toggletag(tags[client.focus.screen][i])
    end
    end
    end):add()
    end
    keybinding({ modkey }, "Left", awful.tag.viewprev):add()
    keybinding({ modkey }, "Right", awful.tag.viewnext):add()
    keybinding({ modkey }, "Escape", awful.tag.history.restore):add()
    -- Standard program
    keybinding({ modkey }, "Return", function () awful.util.spawn(terminal) end):add()
    keybinding({ modkey, "Control" }, "r", function ()
    mypromptbox[mouse.screen].text =
    awful.util.escape(awful.util.restart())
    end):add()
    keybinding({ modkey, "Shift" }, "q", awesome.quit):add()
    -- Client manipulation
    keybinding({ modkey }, "m", awful.client.maximize):add()
    keybinding({ modkey }, "f", function () if client.focus then client.focus.fullscreen = not client.focus.fullscreen end end):add()
    keybinding({ modkey, "Shift" }, "c", function () if client.focus then client.focus:kill() end end):add()
    keybinding({ modkey }, "j", function () awful.client.focus.byidx(1); if client.focus then client.focus:raise() end end):add()
    keybinding({ modkey }, "k", function () awful.client.focus.byidx(-1); if client.focus then client.focus:raise() end end):add()
    keybinding({ modkey, "Shift" }, "j", function () awful.client.swap.byidx(1) end):add()
    keybinding({ modkey, "Shift" }, "k", function () awful.client.swap.byidx(-1) end):add()
    keybinding({ modkey, "Control" }, "j", function () awful.screen.focus(1) end):add()
    keybinding({ modkey, "Control" }, "k", function () awful.screen.focus(-1) end):add()
    keybinding({ modkey, "Control" }, "space", awful.client.togglefloating):add()
    keybinding({ modkey, "Control" }, "Return", function () if client.focus then client.focus:swap(awful.client.getmaster()) end end):add()
    keybinding({ modkey }, "o", awful.client.movetoscreen):add()
    keybinding({ modkey }, "Tab", awful.client.focus.history.previous):add()
    keybinding({ modkey }, "u", awful.client.urgent.jumpto):add()
    keybinding({ modkey, "Shift" }, "r", function () if client.focus then client.focus:redraw() end end):add()
    -- Layout manipulation
    keybinding({ modkey }, "l", function () awful.tag.incmwfact(0.05) end):add()
    keybinding({ modkey }, "h", function () awful.tag.incmwfact(-0.05) end):add()
    keybinding({ modkey, "Shift" }, "h", function () awful.tag.incnmaster(1) end):add()
    keybinding({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1) end):add()
    keybinding({ modkey, "Control" }, "h", function () awful.tag.incncol(1) end):add()
    keybinding({ modkey, "Control" }, "l", function () awful.tag.incncol(-1) end):add()
    keybinding({ modkey }, "space", function () awful.layout.inc(layouts, 1) end):add()
    keybinding({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, -1) end):add()
    -- Prompt
    keybinding({ modkey }, "F1", function ()
    awful.prompt.run({ prompt = "Run: " }, mypromptbox[mouse.screen], awful.util.spawn, awful.completion.bash,
    awful.util.getdir("cache") .. "/history")
    end):add()
    keybinding({ modkey }, "F4", function ()
    awful.prompt.run({ prompt = "Run Lua code: " }, mypromptbox[mouse.screen], awful.util.eval, awful.prompt.bash,
    awful.util.getdir("cache") .. "/history_eval")
    end):add()
    keybinding({ modkey, "Ctrl" }, "i", function ()
    local s = mouse.screen
    if mypromptbox[s].text then
    mypromptbox[s].text = nil
    elseif client.focus then
    mypromptbox[s].text = nil
    if client.focus.class then
    mypromptbox[s].text = "Class: " .. client.focus.class .. " "
    end
    if client.focus.instance then
    mypromptbox[s].text = mypromptbox[s].text .. "Instance: ".. client.focus.instance .. " "
    end
    if client.focus.role then
    mypromptbox[s].text = mypromptbox[s].text .. "Role: ".. client.focus.role
    end
    end
    end):add()
    -- Client awful tagging: this is useful to tag some clients and then do stuff like move to tag on them
    keybinding({ modkey }, "t", awful.client.togglemarked):add()
    for i = 1, keynumber do
    keybinding({ modkey, "Shift" }, "F" .. i,
    function ()
    local screen = mouse.screen
    if tags[screen][i] then
    for k, c in pairs(awful.client.getmarked()) do
    awful.client.movetotag(tags[screen][i], c)
    end
    end
    end):add()
    end
    -- {{{ Hooks
    -- Hook function to execute when focusing a client.
    awful.hooks.focus.register(function (c)
    if not awful.client.ismarked(c) then
    c.border_color = beautiful.border_focus
    end
    end)
    -- Hook function to execute when unfocusing a client.
    awful.hooks.unfocus.register(function (c)
    if not awful.client.ismarked(c) then
    c.border_color = beautiful.border_normal
    end
    end)
    -- Hook function to execute when marking a client
    awful.hooks.marked.register(function (c)
    c.border_color = beautiful.border_marked
    end)
    -- Hook function to execute when unmarking a client.
    awful.hooks.unmarked.register(function (c)
    c.border_color = beautiful.border_focus
    end)
    -- Hook function to execute when the mouse enters a client.
    awful.hooks.mouse_enter.register(function (c)
    -- Sloppy focus, but disabled for magnifier layout
    if awful.layout.get(c.screen) ~= "magnifier"
    and awful.client.focus.filter(c) then
    client.focus = c
    end
    end)
    -- Hook function to execute when a new client appears.
    awful.hooks.manage.register(function (c)
    if use_titlebar then
    -- Add a titlebar
    awful.titlebar.add(c, { modkey = modkey })
    end
    -- Add mouse bindings
    c:buttons({
    button({ }, 1, function (c) client.focus = c; c:raise() end),
    button({ modkey }, 1, function (c) c:mouse_move() end),
    button({ modkey }, 3, function (c) c:mouse_resize() end)
    -- New client may not receive focus
    -- if they're not focusable, so set border anyway.
    c.border_width = beautiful.border_width
    c.border_color = beautiful.border_normal
    -- Check if the application should be floating.
    local cls = c.class
    local inst = c.instance
    if floatapps[cls] then
    c.floating = floatapps[cls]
    elseif floatapps[inst] then
    c.floating = floatapps[inst]
    end
    -- Check application->screen/tag mappings.
    local target
    if apptags[cls] then
    target = apptags[cls]
    elseif apptags[inst] then
    target = apptags[inst]
    end
    if target then
    c.screen = target.screen
    awful.client.movetotag(tags[target.screen][target.tag], c)
    end
    -- Do this after tag mapping, so you don't see it on the wrong tag for a split second.
    client.focus = c
    -- Set the windows at the slave,
    -- i.e. put it at the end of others instead of setting it master.
    -- awful.client.setslave(c)
    -- Honor size hints: if you want to drop the gaps between windows, set this to false.
    -- c.honorsizehints = false
    end)
    -- Hook function to execute when arranging the screen.
    -- (tag switch, new client, etc)
    awful.hooks.arrange.register(function (screen)
    local layout = awful.layout.get(screen)
    if layout then
    mylayoutbox[screen].image = image(beautiful["layout_" .. layout])
    else
    mylayoutbox[screen].image = nil
    end
    -- Give focus to the latest client in history if no window has focus
    -- or if the current window is a desktop or a dock one.
    if not client.focus then
    local c = awful.client.focus.history.get(screen, 0)
    if c then client.focus = c end
    end
    -- Uncomment if you want mouse warping
    if client.focus then
    local c_c = client.focus:fullgeometry()
    local m_c = mouse.coords()
    if m_c.x < c_c.x or m_c.x >= c_c.x + c_c.width or
    m_c.y < c_c.y or m_c.y >= c_c.y + c_c.height then
    if table.maxn(m_c.buttons) == 0 then
    mouse.coords({ x = c_c.x + 5, y = c_c.y + 5})
    end
    end
    end
    end)
    -- Hook called every second
    awful.hooks.timer.register(1, function ()
    -- For unix time_t lovers
    mytextbox.text = " " .. os.time() .. " time_t "
    -- Otherwise use:
    -- mytextbox.text = " " .. os.date() .. " "
    end)
    Then if I try this one, I just get a black screen, I have all the required things:
    -- Version 2
    -- This config is for use with awesome 3.0 stable.
    -- If you have any suggestions or questions, feel free
    -- to pass me a message, find me in #awesome on OFTC, or
    -- email me at <lucas[at]glacicle.com>
    -- I use both wicked and eminent, so to use it,
    -- you'll need to get both those helper libraries too.
    -- Note that I use all-custom keybindings, so you might
    -- want to copy the default rc.lua's keybindings
    -- into here if you wish to use those, although you might
    -- find you like mine better :P
    ---- {{{ Require lua libraries
    -- Shipped with awesome
    require("awful")
    require("beautiful")
    -- External
    require("wicked") -- Widgets
    require("eminent") -- Dynamic tagging
    ---- {{{ 'Beautiful' theme settings
    -- Font
    beautiful.font = "Dina 8"
    -- Background
    beautiful.bg_normal = '#414141'
    beautiful.bg_focus = '#414141'
    beautiful.bg_sbfocus = '#414141'
    beautiful.bg_urgent = '#414141'
    -- Foreground
    beautiful.fg_normal = '#999999'
    beautiful.fg_focus = '#335565'
    beautiful.fg_urgent = '#A000000'
    -- Border
    beautiful.border_width = 2
    beautiful.border_normal = '#414141'
    beautiful.border_focus = '#335565'
    beautiful.border_marked = '#91231c'
    -- Wallpaper
    -- wallpaper_cmd = awsetbg /storage/images/backgrounds/nature/looking.jpg
    ---- {{{ Modkeys
    key = {}
    key.none = {}
    key.alt = {"Mod1"}
    key.super = {"Mod4"}
    key.shift = {"Shift"}
    key.control = {"Control"}
    key.super_alt = {key.super[1], key.alt[1]}
    key.super_shift = {key.super[1], key.shift[1]}
    key.super_control = {key.super[1], key.control[1]}
    key.control_alt = {key.control[1], key.alt[1]}
    key.shift_alt = {key.shift[1], key.alt[1]}
    ---- {{{ Settings
    -- Initialise tables
    settings = {}
    settings.widget = {}
    settings.apps = {}
    settings.tag = {}
    settings.bindings = {}
    -- {{{ General
    -- Widget spacer and separator
    settings.widget_spacer = " "
    settings.widget_separator = " "
    -- Warp mouse
    settings.warp_mouse = true
    -- New become master
    settings.new_become_master = false
    -- Tag mwfact
    settings.tag.mwfact = 0.618033988769
    -- {{{ Applications
    -- Terminal application
    settings.apps.terminal = 'urxvt'
    -- Command to lock the screen
    settings.apps.lock_screen = 'xscreensaver-command -lock'
    -- Command to turn screen off with DPMS
    settings.apps.screen_off = 'sleep 1; xset dpms force off'
    -- File manager application
    settings.apps.filemanager = settings.apps.terminal..' -e zsh -c "vifm %s"'
    -- {{{ Floating windows
    settings.floating = {
    ["gimp"] = true,
    ["urxvtcnotify"] = true,
    ["MPlayer"] = true,
    -- {{{ Other
    -- Check what widget mode to use
    settings.widget_mode = 'desktop'
    -- Highlight statusbar of focussed screen on multiple-monitor setups
    if screen.count() > 1 then
    settings.statusbar_highlight_focus = {true, 1}
    end
    ---- {{{ Keybindings
    -- Initialise table
    settings.bindings.wm = {}
    settings.bindings.mouse = {}
    -- {{{ Open the filemanager at specific locations
    settings.bindings.filemanager = {
    -- Alt+d: Data partition
    ["/storage"] = {key.alt, "#40"},
    -- Alt+a: Home Directory
    [os.getenv("HOME")] = {key.alt, "#38"},
    -- {{{ Run specific commands
    settings.bindings.commands = {
    -- Alt+q: Open Terminal
    [settings.apps.terminal] = {key.alt, "#24"},
    -- Mod+k: GNU Screen
    -- [settings.apps.gnu_screen] = {key.super, "#45"},
    -- Mod+l: Lock screen
    [settings.apps.lock_screen] = {key.super, "#46"},
    -- Mod+o: Screen off with DPMS
    [settings.apps.screen_off] = {key.super, "#32"},
    -- {{{ Tag bindings
    settings.bindings.wm.tag = {
    -- Mod+a: Switch to previous tag
    [function() eminent.tag.prev(mouse.screen) end] = {key.super, "#38"},
    -- Mod+s: Switch to next tag
    [function() eminent.tag.next(mouse.screen) end] = {key.super, "#39"},
    -- Alt+\: Switch to float layout
    [function() awful.layout.set('floating') end] = {key.alt, "#51"},
    -- Alt+z: Switch to max layout
    [function() awful.layout.set('max') end] = {key.alt, "#52"},
    -- Alt+x: Switch to tile layout
    [function() awful.layout.set('tile') end] = {key.alt, "#53"},
    -- {{{ Prompt bindings
    settings.bindings.prompt = {
    -- Alt+w: Run prompt
    [{awful.spawn, " Run: "}] = {key.alt, "#25"},
    -- Mod+Alt+w: Lua eval prompt
    [{awful.eval, " Run Lua: "}] = {key.super_alt, "#25"},
    -- {{{ Miscellaneous bindings
    settings.bindings.wm.misc = {
    -- Mod+Alt+r: Restart awesome
    [awesome.restart] = {key.super_alt, "#27"},
    -- Mod+e: Switch focus to next screen
    [function() awful.screen.focus(1) end] = {key.super, "#26"},
    -- Mod+d: Switch focus to previous screen
    [function() awful.screen.focus(-1) end] = {key.super, "#40"},
    -- {{{ Keyboard digit bindings
    settings.bindings.digits = {
    -- Mod+##: View tag
    [awful.tag.viewonly] = key.super,
    -- Mod+Shift+##: Toggle tag view
    [function(t) t.selected = not t.selected end] = key.super_shift,
    -- Mod+Control+##: Move window to tag
    [awful.client.movetotag] = key.super_control,
    -- Mod+Alt+##: Toggle window on tag
    [awful.client.toggletag] = key.super_alt,
    -- {{{ Mouse bindings
    settings.bindings.mouse.desktop = {
    -- Right click on desktop: Open terminal
    [function() awful.spawn(settings.apps.terminal) end] = {key.none, 3},
    settings.bindings.mouse.client = {
    -- Alt+Left: Move window
    [function(c) c:mouse_move() end] = {key.alt, 1},
    -- Alt+Right: Resize window
    [function(c) c:mouse_resize({corner="bottomright"}) end] = {key.alt, 3},
    ---- {{{ Markup helper functions
    -- Inline markup is a tad ugly, so use these functions
    -- to dynamically create markup, we hook them into
    -- the beautiful namespace for clarity.
    beautiful.markup = {}
    function beautiful.markup.bg(color, text)
    return '<bg color="'..color..'" />'..text
    end
    function beautiful.markup.fg(color, text)
    return '<span color="'..color..'">'..text..'</span>'
    end
    function beautiful.markup.font(font, text)
    return '<span font_desc="'..font..'">'..text..'</span>'
    end
    function beautiful.markup.title(t)
    return t
    end
    function beautiful.markup.title_normal(t)
    return beautiful.title(t)
    end
    function beautiful.markup.title_focus(t)
    return beautiful.markup.bg(beautiful.bg_focus, beautiful.markup.fg(beautiful.fg_focus, beautiful.markup.title(t)))
    end
    function beautiful.markup.title_urgent(t)
    return beautiful.markup.bg(beautiful.bg_urgent, beautiful.markup.fg(beautiful.fg_urgent, beautiful.markup.title(t)))
    end
    function beautiful.markup.bold(text)
    return '<b>'..text..'</b>'
    end
    function beautiful.markup.heading(text)
    return beautiful.markup.fg(beautiful.fg_focus, beautiful.markup.bold(text))
    end
    ---- {{{ Widgets
    settings.statusbars = {}
    settings.widgets = {}
    settings.statusbars[1] = {{
    position = "top",
    height = 18,
    fg = beautiful.fg_normal,
    bg = beautiful.bg_normal,
    name = "mainstatusbar",
    }, "all"}
    settings.promptbar = {
    position = "top",
    height = 18,
    fg = beautiful.fg_normal,
    bg = beautiful.bg_normal,
    name = "promptbar",
    -- {{{ Taglist
    maintaglist = widget({
    type = 'taglist',
    name = 'maintaglist'
    function maintaglist.label(t)
    return awful.widget.taglist.label.noempty(t)
    end
    maintaglist:mouse_add(mouse(key.none, 1, function (o, t) awful.tag.viewonly(t) end))
    table.insert(settings.widgets, {1, maintaglist})
    if settings.widget_mode ~= 'none' then
    -- {{{ MPD Widget
    mpdwidget = widget({
    type = 'textbox',
    name = 'mpdwidget',
    align = 'right'
    wicked.register(mpdwidget, wicked.widgets.mpd, function (widget, args)
    -- I don't want the stream name on my statusbar, so I gsub it out,
    -- feel free to remove this bit
    return settings.widget_spacer..beautiful.markup.heading('MPD')..': '
    ..args[1]:gsub('AnimeNfo Radio | Serving you the best Anime music!: ','')
    ..settings.widget_spacer..settings.widget_separator end)
    table.insert(settings.widgets, {1, mpdwidget})
    -- {{{ GMail Widget
    gmailwidget = widget({
    type = 'textbox',
    name = 'gmailwidget',
    align = 'right'
    gmailwidget:mouse_add(mouse(key.none, 1, function () wicked.update(gmailwidget) end))
    function read_gmail_temp(format)
    local f = io.open('/tmp/gmail-temp')
    if f == nil then
    return {'n/a'}
    end
    local n = f:read()
    if n == nil or f == ' ' or f == '' then
    f:close()
    return {'n/a'}
    end
    return {n}
    end
    wicked.register(gmailwidget, read_gmail_temp, function (widget, args)
    local n = args[1]
    local out = settings.widget_spacer..beautiful.markup.heading('GMail')..': '
    if n ~= "n/a" and tonumber(n) > 0 then
    out = out..beautiful.markup.bg(beautiful.bg_urgent, beautiful.markup.fg(beautiful.fg_urgent, tostring(n)))
    else
    out = out..tostring(n)
    end
    out = out..settings.widget_spacer..settings.widget_separator
    return out
    end, 120)
    -- Start timer to fill the temp file
    awful.hooks.timer.register(110, function ()
    -- Call GMail check script to check for new email
    os.execute(os.getenv("HOME")..'/other/.gmail.py > /tmp/gmail-temp &')
    end, true)
    wicked.update(gmailwidget)
    table.insert(settings.widgets, {1, gmailwidget})
    -- {{{ Load Averages Widget
    loadwidget = widget({
    type = 'textbox',
    name = 'loadwidget',
    align = 'right'
    function widget_loadavg(format)
    -- Use /proc/loadavg to get the average system load on 1, 5 and 15 minute intervals
    local f = io.open('/proc/loadavg')
    local n = f:read()
    f:close()
    -- Find the third space
    local pos = n:find(' ', n:find(' ', n:find(' ')+1)+1)
    return {n:sub(1,pos-1)}
    end
    wicked.register(loadwidget, widget_loadavg,
    settings.widget_spacer..beautiful.markup.heading('Load')..': $1'..settings.widget_spacer..settings.widget_separator, 2)
    table.insert(settings.widgets, {1, loadwidget})
    -- {{{ CPU Usage Widget
    cputextwidget = widget({
    type = 'textbox',
    name = 'cputextwidget',
    align = 'right'
    wicked.register(cputextwidget, wicked.widgets.cpu,
    settings.widget_spacer..beautiful.markup.heading('CPU')..': $1%'..settings.widget_spacer..settings.widget_separator,
    nil, nil, 2)
    table.insert(settings.widgets, {1, cputextwidget})
    -- {{{ CPU Graph Widget
    cpugraphwidget = widget({
    type = 'graph',
    name = 'cpugraphwidget',
    align = 'right'
    cpugraphwidget.height = 0.85
    cpugraphwidget.width = 45
    cpugraphwidget.bg = '#333333'
    cpugraphwidget.border_color = '#0a0a0a'
    cpugraphwidget.grow = 'left'
    cpugraphwidget:plot_properties_set('cpu', {
    fg = '#AEC6D8',
    fg_center = '#285577',
    fg_end = '#285577',
    vertical_gradient = false
    wicked.register(cpugraphwidget, wicked.widgets.cpu, '$1', 1, 'cpu')
    table.insert(settings.widgets, {1, cpugraphwidget})
    -- {{{ Memory Usage Widget
    memtextwidget = widget({
    type = 'textbox',
    name = 'memtextwidget',
    align = 'right'
    wicked.register(memtextwidget, wicked.widgets.mem,
    settings.widget_spacer..beautiful.markup.heading('MEM')..': '..
    '$1% ($2/$3)'..settings.widget_spacer..settings.widget_separator,
    3, nil, {2, 4, 4})
    table.insert(settings.widgets, {1, memtextwidget})
    -- {{{ Memory Graph Widget
    memgraphwidget = widget({
    type = 'graph',
    name = 'memgraphwidget',
    align = 'right'
    memgraphwidget.height = 0.85
    memgraphwidget.width = 45
    memgraphwidget.bg = '#333333'
    memgraphwidget.border_color = '#0a0a0a'
    memgraphwidget.grow = 'left'
    memgraphwidget:plot_properties_set('mem', {
    fg = '#AEC6D8',
    fg_center = '#285577',
    fg_end = '#285577',
    vertical_gradient = false
    wicked.register(memgraphwidget, wicked.widgets.mem, '$1', 1, 'mem')
    table.insert(settings.widgets, {1, memgraphwidget})
    -- {{{ Other Widget
    settings.widget_spacerwidget = widget({ type = 'textbox', name = 'settings.widget_spacerwidget', align = 'right' })
    settings.widget_spacerwidget.text = settings.widget_spacer..settings.widget_separator
    table.insert(settings.widgets, {1, settings.widget_spacerwidget})
    end
    -- You shouldn't have to edit the code after this,
    -- it takes care of applying the settings above.
    ---- {{{ Initialisations
    -- Register beautiful with awful
    awful.beautiful.register(beautiful)
    -- Set default colors
    awesome.colors_set({
    fg = beautiful.fg_normal,
    bg = beautiful.bg_normal })
    -- Set default font
    awesome.font_set(beautiful.font)
    -- Table of layouts to cover with awful.layout.inc, order matters.
    layouts =
    "tile",
    "tileleft",
    "tilebottom",
    "tiletop",
    "fairh",
    "fairv",
    "magnifier",
    "max",
    "fullscreen",
    "spiral",
    "dwindle",
    "floating"
    -- Define tag tables
    tag_settings = {
    { name="main", layout=layouts[1] },
    { name="work", layout=layouts[1] },
    { name="float", layout=layouts[12] }
    -- Initialize tags in awesome 3.1
    tags = {}
    for s = 1, screen.count() do
    tags[s] = {}
    for tagnumber = 1, 3 do
    tags[s][tagnumber] = tag({ name = tag_settings[tagnumber].name, layout = tag_settings[tagnumber].layout })
    tags[s][tagnumber].screen = s
    awful.layout.set(layouts[1], tags[s][tagnumber])
    end
    tags[s][1].selected = true
    end
    ---- {{{ Create statusbars
    local mainstatusbar = {}
    for i, b in pairs(settings.statusbars) do
    mainstatusbar[i] = {}
    for s=1,screen.count() do
    this_screen = false
    if b[2] ~= "all" then
    for sc in pairs(b[2]) do
    if sc == s then
    this_screen = true
    break
    end
    end
    end
    if b[2] == "all" or this_screen then
    mainstatusbar[i][s] = statusbar(b[1])
    local widgets = {}
    for ii, w in pairs(settings.widgets) do
    if w[1] == i then
    table.insert(widgets, w[2])
    end
    end
    mainstatusbar[i][s]:widgets(widgets)
    mainstatusbar[i][s].screen = s
    end
    end
    end
    ---- {{{ Create prompt statusbar
    local mainpromptbar = statusbar(settings.promptbar)
    local mainpromptbox = widget({type = "textbox", align = "left", name = "mainpromptbox"})
    mainpromptbar:widgets({mainpromptbox})
    mainpromptbar.screen = nil
    ---- {{{ Useful functions
    -- {{{ Mouse warp function
    function mouse_warp(c, force)
    -- Allow skipping a warp
    if warp_skip then
    warp_skip = false
    return
    end
    -- Get vars
    local sel = c or client.focus
    if sel == nil then return end
    local coords = sel:coords()
    local m = mouse.coords()
    -- Settings
    mouse_padd = 6
    border_area = 5
    -- Check if mouse is not already inside the window
    if (( m.x < coords.x-border_area or
    m.y < coords.y-border_area or
    m.x > coords.x+coords.width+border_area or
    m.y > coords.y+coords.height+border_area
    ) and (
    table.maxn(m.buttons) == 0
    )) or force
    then
    mouse.coords({ x=coords.x+mouse_padd, y=coords.y+mouse_padd})
    end
    end
    -- {{{ Prompt with statusbar
    function prompt_statusbar(s, callback, prompt)
    if not callback then callback = awful.spawn end
    if not prompt then prompt = " Run: " end
    for i, b in pairs(mainstatusbar) do
    for ii, bb in pairs(b) do
    if bb.screen == s then
    bb.screen = nil
    end
    end
    end
    mainpromptbar.screen = s
    awful.prompt.run({prompt = prompt}, mainpromptbox, callback,
    awful.completion.bash, os.getenv("HOME") .. "/.cache/awesome_history", 50, function ()
    mainpromptbar.screen = nil
    for i, b in pairs(mainstatusbar) do
    for ii, bb in pairs(b) do
    if ii == s then
    bb.screen = ii
    end
    end
    end
    end)
    end
    ---- {{{ Create bindings
    --- This reads the binding tables and turns them into actual keybindings
    -- Always qwerty
    -- WM Bindings
    for i,table in pairs(settings.bindings.wm) do
    for f, keys in pairs(table) do
    keybinding(keys[1], keys[2], f):add()
    end
    end
    -- Keyboard digit bindings
    for i=1,9 do
    for f, mod in pairs(settings.bindings.digits) do
    keybinding(mod, i, function()
    t = eminent.tag.getn(i, nil, true)
    if not t then return end
    f(t)
    end):add()
    end
    end
    -- Prompt Bindings
    for prompt, keys in pairs(settings.bindings.prompt) do
    keybinding(keys[1], keys[2], function() prompt_statusbar(mouse.screen, unpack(prompt)) end):add()
    end
    -- Filemanager bindings
    for loc, keys in pairs(settings.bindings.filemanager) do
    keybinding(keys[1], keys[2], function() awful.spawn(string.format(settings.apps.filemanager, loc)) end):add()
    end
    -- Custom command bindings
    for command, keys in pairs(settings.bindings.commands) do
    keybinding(keys[1], keys[2], function() awful.spawn(command) end):add()
    end
    -- Desktop mouse bindings
    for f, keys in pairs(settings.bindings.mouse.desktop) do
    awesome.mouse_add(mouse(keys[1], keys[2], f))
    end
    ---- {{{ Set hooks
    -- {{{ Focus hook
    awful.hooks.focus.register(function (c)
    -- Skip over my urxvtcnotify
    if c.name and c.name:lower():find('urxvtcnotify') and awful.client.next(1) ~= c then
    awful.client.focusbyidx(1)
    return
    end
    -- Set border
    c.border_color = beautiful.border_focus
    -- Raise the client
    c:raise()
    -- Set statusbar color
    if settings.statusbar_highlight_focus and settings.statusbar_highlight_focus[1] then
    if last_screen == nil or last_screen ~= c.screen then
    mainstatusbar[settings.statusbar_highlight_focus[2]][c.screen].bg = beautiful.bg_sbfocus
    if last_screen then
    mainstatusbar[settings.statusbar_highlight_focus[2]][last_screen].bg = beautiful.bg_normal
    end
    end
    last_screen = c.screen
    end
    end)
    -- {{{ Unfocus hook
    awful.hooks.unfocus.register(function (c)
    -- Set border
    c.border_color = beautiful.border_normal
    end)
    -- {{{ Mouseover hook
    awful.hooks.mouseover.register(function (c)
    -- Set focus for sloppy focus
    client.focus = c
    end)
    -- {{{ Manage hook
    awful.hooks.manage.register(function (c)
    local class = ""
    local name = ""
    if c.class then
    class = c.class:lower()
    end
    if c.name then
    name = c.name:lower()
    end
    -- Create border
    c.border_width = beautiful.border_width
    c.border_color = beautiful.border_normal
    -- Add mouse bindings
    for f, keys in pairs(settings.bindings.mouse.client) do
    c:mouse_add(mouse(keys[1], keys[2], f))
    end
    -- Check if floating
    for app, i in pairs(settings.floating) do
    if class:find(app) or name:find(app) then
    c.floating = i
    break
    end
    end
    if name:find('urxvtcnotify') then
    -- I got sick of libnotify/notification-daemon
    -- and their dependencies, so I'm using a little
    -- urxvtc window with some text in it as notifications :P
    -- This makes it appear at the correct place,
    -- feel free to remove the whole section, you probably
    -- won't need it.
    c.screen = 3
    c:coords({
    x = 1680*2+1400,
    y = 18,
    width = 276,
    height = 106
    c.border_color = beautiful.border_normal
    local tags = {}
    for i,t in pairs(eminent.tags[3]) do
    if eminent.tag.isoccupied(3, t) then
    table.insert(tags, t)
    end
    end
    c:tags(tags)
    return 0
    end
    -- Focus new clients
    client.focus = c
    -- Prevent new windows from becoming master
    if not settings.new_become_master then
    awful.client.swap(1, c)
    end
    -- Don't honor size hints
    c.honorsizehints = false
    end)
    -- {{{ Arrange hook
    awful.hooks.arrange.register(function(s)
    -- Warp the mouse
    if settings.warp_mouse then
    mouse_warp()
    end
    -- Check focus
    if not client.focus then
    local c = awful.client.focus.history.get(s, 0)
    if c then client.focus = c end
    end
    end)
    -- vim: set filetype=lua fdm=marker tabstop=4 shiftwidth=4 expandtab smarttab autoindent smartindent nu:

    The most likely reason for you seeing the default settings, or nothing is that there is some error in the configuration file. You would have to take a look at the error output of xorg. Since I start X using startx I can look at it on the first sterminal (ALT - CTRL - F1). I don't know where the output would go if you use GDM or something similar.
    If there are errors you could post them here and people might be able to help.
    If the comment of the second config file is correct then the config most likely wont work with awesome 3.1 since the sytax of the config file changed between 3.0 and 3.1
    Another possibility to get a working config would be to copy the default awesome config into your ~/.config/awesome folder and then gradually make changes to it, exchanging content for stuff from other configs, that way you'd know which change brakes something.

  • Awesome menu not working?

    Hey!
    I installed Awesome,
    > sudo pacman -S awesome
    and then went about trying to get some sort of launcher up and working, in this case the built-in "awesome-menu", by following these steps.
    > mkdir .awesome
    > cd .awesome
    > touch menu
    > nano menu
    Then simply inserted these lines:
    leafpad
    firefox
    After that I edited ~/.awesomerc to the following (excerpt):
    key
    modkey = {"Mod4"}
    key = "p"
    command = "spawn"
    arg = "exec `cat ~/.awesome/menu | awesome-menu`"
    But when I launch X and Awesome, and press Mod4+p, nothing happens. I tried installing dmenu instead, and edited ~/.awesomerc once more, to the lines right below the awesome-menu entry in the FAQ linked to above. It works, when the key combo is pressed a light grey bar is displayed in the bottom portion of the screen. So how come the awesome-menu doesn't work?
    (I'm aware of the fact that I could use dmenu instead, but I'd rather explore the capabilities of the built-in first afore I go ahead with extra functionalities. The documentation of the both is rather lacking... not sure what the differences are.)
    Any ideas/suggestions/tips?
    Thank you in advance.

    The stable version of Awesome doesn't have awesome-menu. You'll need to upgrade to a development version. Try awesome-git from AUR.

  • Upgrade libev-3.80-1 breaks awesome hotkeys for xterm

    Hi,
    I've just upgraded to libev-3.80-1 and now the default key assigned to kill() in awesome's rc.lua (meta+shift+c) produces no effect against an xterm or an urxvt - it does however work against an aterm and firefox. Actually, this is independent of the key assigned, and affects all calls in the "clientkeys" section.
    Weird...
    Anyhow, downgrading to libev-3.60-2 fixes this issue:
      http://arm.kh.nu/community/os/i686/libe … pkg.tar.gz

    If you want to use the newer libev, you could try rebuilding the awesome package you're using from source. Do you know how to use abs and makepkg? You could bump the version of awesome you're using from 3.3.1 -> 3.3.3 while you're at it.
    If that doesn't work, then I guess there were changes to libev that the release version of awesome doesn't yet properly deal with. You could try installing awesome-git from aur, but note that this is much less stable. (Depending on what day you install it, it may or may not break for you.)

  • Yoga 2 Bluetooth not stable with 7260 AC card

    Hi everyone,
    I'm having a problem with my Microsoft Wireless Bluetooth 8000 presenter mouse staying connected via Bluetooth.  I have installed the latest Kona Wifi driver and the latest Bluetooth driver from the Lenovo site.  It's my opinion that these two drivers are not compatible. 
    The only way I have been able to keep both the wifi and the Bluetooth stable and not drop connections is to have the latest Kona driver for wifi and roll back the Bluetooth driver to the "generic Bluetooth driver" from 2006.  When I use the most recent Bluetooth driver it works initially but then it will be totally unresponsive after I sleep or restart the computer and I have to keep reinstalling the Bluetooth mouse to reconnect.  Crazy!
    I have all the Bluetooth, USB and Wifi energy setting turned off so the computer cannot put any of them to sleep to save power.
    On a side note, I also installed the Intel AC dual band version of the card. 
    I have noticed that I have lost my 5 Ghz wifi connection completely a couple of times in the last few days with both the Kona version of the wifi driver and with the driver direct from Intel's site.  Both appear to be the same driver.  The only way I am able to get my 5 Ghz back is to reboot the computer and bang - it's back. 
    The other interesting thing is I can have the laptop right next to my router and the it will go from 2 bars to 5 bars back and forth but when I monitor the connection with Inssider it does not show any signal drops or degradation of signal.  What the heck is going on with the windows wifi meter?
    I don't blame these issues on Lenovo and I understand that I now have a non-stock wifi card installed so I'm on my own.  I think there is an issue Intel not getting these drivers right with the windows 8.1 update.  Intel needs to get their crap together with their 7260 series of wifi cards.  Anyone know what the new MacBook pros are using for AC wifi cards?
    BTW - turning of Bluetooth is not a reasonable solution to fixing my problems.  Both should just work.  I'm curious if anyone else has found a good combination of Bluetooth  and wifi drivers who may also have installed the AC dual band version of the card.  I'm about 90 percent stable at this point but I just can't stand the idea of using a Bluetooth driver from 2006.
    Overall, the laptop is good.  The greasy looking track pad looks like hell already and the light bleed from the bottom of the screen is annoying.  High res is awesome for most things but almost un-useable for other older programs that won't scale right.  My wife is getting huge headaches trying to use a work program with miniature font.  When I remote desktop into my home server it is terribly small....break out the magnifying glass!
    Looking forward to the yellow update and hopefully some wifi/Bluetooth stability in the near future - I'm talking to you Intel.  Peace!

    I'm using a Logitec Bluetooth mouse and have problems.  I installed the Bluetooth drivers from the Lenovo web site.  When I click to open a window, the Bluetooth mouse becomes inoperable.  I can use the touch screen or the pad to move the cursor or windows.  The mouse will "go to sleep" and then re-activate after perhaps 20 seconds or so.
    No time to troubleshoot it right now, but has anyone tried new drivers from Intel for the wifi card or from Microsoft for Bluetooth?  All Lenovo drivers are dated October 16 I think.  The fact that it happens with a Logitec mouse susggests driver problems.
    Love the laptop, however !!

  • Why BIA is not stable after all these years? (old)

    Hi all,
    We purchased BIA (16GB blades) in 2006, implemented to our production in 2007 with Version 34.
    It was a success; the first month BIA was hit 18K times. Today we are seeing about 300K hit a month (we're using 32GB blades with version 49. ). I can assure you that it was(and is)not a plug and play appliance, we have experienced every single BIA error existed on earth. Don't get me wrong; when it works it's an awesome product, I believe in BIA and support it 150%, this is why i am here spending my time.
    3 weeks back, we upgraded BIA from Ver 48 to 49. After a week of quiet time, one of my blades went down for no appearent reason, that not only caused an outage for thousands of internal and external customers but wiped out the confidence that I have with the new version 49.
    Today, I am "once again" sending apology emails to my users, customers, my boss, CIO etc about the BIA outage. Forget about preventing this to happen in the first place, but I don't understand why it is so hard for you SAP guys to identify the query that crushed the blade(s). I assume your priority is making BIA fancier - such as working on back-up and recovery - instead of making it stable, or at least more monitorable
    It is very, very, very frustrating that after all these years that this tool is still not stable, in other words after all the feedback we gave to SAP, after all the times we spent together, we are back to the square one. Think about , would you be keep investigating to a car that keep stopping in the middle of rush hour traffic? So why should you pay hundreds of thousands of dollars for a product that goes down every day? 
    Anyways, let me know if you know a way to find out what particular query brings down BIA without leaving the trace on 24x7 for days.
    Cheers
    Tansu
    Edited by: tansuaksu on Apr 30, 2009 1:46 PM
    Edited by: tansuaksu on Apr 30, 2009 2:01 PM

    Tansu,
    if you go to Usage -> Acess Statistics in TREXAdmin (Python), not all the columns are populated by default (at least in our case)
    Like #unloads, #reads, waittime, #merges, # writes, #plans, input/output, # FEMS among others.
    To collect this data, you have to activate additional level of stats.
    Go to indexserver.ini for your masterblade. default is set to No. Change it to yes.
    [indexusagecollector]                                                                               
    #active = no                                                                               
    active = yes  
    Unfortunately, there is no documentation available on what each of these values truly represent. So you are left on your own to interpret them as you like.
    A discussion in this forum on how you read these numbers would be helpful though.
    BIA Stability:
    To sum up: BIA has the notion "It rocks when it works" in our company.
    Some of biggest issues:
    1. There are queries failing that BI team doesn't know about unless users report to us. But users have stopped reporting BIA related failures to us because same query completes successfully after 5 mins (when the temporary memory goes down again). so our users just rerun the quey after sometime rather than reporting it to us. Bottomline -  BIA is NOT up 100%. we only know if a query has failed if we go thru the trace files.
    2. As Arun mentioned, we too have some queries that dont work at all with BIA due to huge dataset sent back to OLAP. Eventually we had to turn off BIA for those queries.
    3. It takes too long for back up to take over. In our case it took 75 mins before back up took over.
    we would rather prefer to set a threshold ourselves on when back up should kick in rather than waiting for active blade to go completely down. Unless its a hardware failure (chances of which are pretty slim), back up would always wait for active blade to go completely down. what if an acitve blade is in hung state?
    [Re: Automated Failover - can we force backup blade to take over?] discussed here
    4. We dont know which query brings BIA down. (that what we are tyring to figure out using the stats mentioned above.)
    4. Inverted Data model - we have some cubes which have master data tables bigger than fact tables.
    For some, BIA works. For others, aggregates are more effecient. we are still not able to figure out, whats the difference?
    [How to relate STEPUID/DMUID in RSDDSTAT_DM to STATUID in RSDDSTATTREXSERV; discussed here
    Lets see how Rev 50 addresses our issues.
    Thanks,
    Saurabh Bansal

  • [SOLVED] Does anyone really have a "rock stable" Arch?

    Please see the  Rock Stable Arch Linux HOWTO  wiki page and contribute. The short answer to this thread for those who want to know if Arch can be really stable is yes.
    Lately I've been looking into FreeBSD, but I haven't installed it because some of my important hardware (wireless card, etc.) are not supported until 8.0 and I would prefer to wait until the official release rather than run betas & RCs. In almost all of the comparisons between FreeBSD and Linux that I read, there are references to FreeBSD being far more stable than Linux because of the base system and how thought is put into how the programs at the base work together and the FreeBSD team makes sure everything is working correctly before deployment of a release. From what I've read, FreeBSD is designed with thought and effort put into how the base system should function to ensure stability and correctness, whereas Linux is grown as haphazard development and hacking is dropped onto the kernel piece by piece, with everything being an add on.
    That doesn't sound very fair to Linux, for if that were 100% true, Linux wouldn't even work! The Arch Wiki elucidates that the people behind the Arch project put plenty of effort towards code-correctness, elegance, and cutting the BS out of the system, right?
    So after reading up on FreeBSD and having some time to still enjoy Linux until FBSD 8.0 hits STABLE, I started to think that maybe Linux is still right for me, the best for me. After all, Arch takes everything the entire Linux community has to offer and allows us to put it together with pacman and the awesome AUR. The only problem is, as soon as I fired up my old reliable Arch install and did a pacman -Syu, I found that my nvidia driver was broken for this release and I would probably have to downgrade. I know it's probably an easy fix, but I really don't like when this kind of stuff happens. I get that feeling of finally finishing my configuration just the way I like it, finally conquering the beast that is Arch, and then a simple update causes a showstopper breakage.
    Is this really possible to avoid? Is it because I'm using proprietary software that can't really be controlled and that going (almost) all open-source would help prevent this? How often do these breakages happen to you guys? Do you consider it a pain to fix or do you just shrug it off as part of the process of using Arch?
    I used to not mind so much but that was when I was still configuring and it just felt like one extra step. Now I'd like to have that rock of a system I know (hope) Linux can be. I even considered switching to slackware or another distro, but I love Arch so much! It's just so perfect! But how can I avoid these kinds of breakages? I'd really rather not just accept them as a part of using Linux because that makes me feel like I'm using Windows and accepting the fact that my computer crawls and crashes every other day.
    I know the easy post for you guys would be to tell me "just try FreeBSD/Slackware/other OS and leave me alone", but I really want to stay with Arch. I love the community, the documentation, the software, the everything! I feel it really is "Linux done right". But what about these update breakages?
    One more question (well, two more, but related): Is it true that not updating for a long time and then doing a pacman -Syu can break your system? Do I have to update every day to keep Arch happy and stable?
    Thanks everyone. Hopefully you guys can shed some light on this for me.
    Last edited by Allamgir (2009-08-22 12:14:17)

    I got your message, so here's a reply:
    I've walked the line between bleeding edge features and rock-solid stability for several years now.  I finally made a decision a few months ago and came down on the side of stability.  There really isn't a right answer to this question - it comes down to personal preference.
    There is a lot to be said for a bleeding-edge rolling-release distro such as Arch.  I remember the time I ran my first pacman -Syu and felt awed at the fact that I was one of the first users to get the latest version of *.  However, I've grown more pragmatic since then.  Sure, it's fun to get the latest and "greatest"; but is it really worth it?  Are you really much more productive with the new version than you were with the old?  In my case, the answer was usually no.  I just don't care if my stuff is at the latest version (provided that the latest security updates are installled, that is!)
    So, I started using Scientific Linux (a RHEL clone from CERN, Fermilab, and some other research institutes).  It has a fairly lightweight live CD available and works beautifully for me.  My kernel version is 2.6.18 (with some newer drivers).  Do I care?  Not really.  It works and it does what I tell it to do.  There are some exceptions.  While I mostly browse with elinks, sometimes I need to use Firefox for Flash or whatnot.  And I like to have that in the latest version.  So, I just download the latest binary and run it from my home directory.  Problem solved.
    You don't have to go as far as I did.  There are some other choices:
    Slackware.  I know you decided that Slack wasn't for you, but it's a remarkable system and it can be pretty modern if you choose to keep it up-to-date.  Even if you end up not liking it, I feel that Slackware's package management (or lack thereof) is something every user should experience.  It gives you a new outlook on the KISS philosophy.
    SliTaz. I include SliTaz because it is the perfect system to customize completely.  If you want it up to date, it will be.  New versions not in the repos?  Build them; it's easy.  SliTaz is what you make of it, provided that you are willing to put in the time.
    Arch.  You can stay with Arch (sounds like that's where you're at right now).  If you want the latest software just for the sake of it, or use bloated amalgamations that are hard to update yourself (*cough* desktop environments *cough*), Arch is the best rolling-release system I've used.  The team is dedicated and this community is great.
    Think it over and come to your own decision.

  • [SOLVED] Google Chrome doesn't render page after lost focus in Awesome

    Hello !
    I have installed fresh Arch Linux with linux-ck and awesome. After that I have installed google-chrome-stable and started it. Everything works well, but if I opened other application (chrome lost focus) and then got back to the chrome, it freezes. Mouce cursor worked as expected (cursor changed after hovering link, input field, etc) but view was not updated.
    Everything works well again if I change desktop to the second and go back to the first again (mod+2, mod+1). Chrome works, responses etc well.
    bvg
    Did you met something like that ? How can I fix it ?
    Edit:
    I bet this issue has something in common with hw acceleration. If I run some game on steam, lost focus, got back to the game - it show last rendered screen before focus has been lost (sound is ok, game is responsible but not updates screen).
    I use nvidia. Do I need some extra configuration to handle it ?
    Last edited by hsz (2013-12-18 17:16:17)

    The problem was `xcompmgr` which caused "freezing" view. I switched it to `unagi` and all of the problems have gone.

  • Awesome's future?

    Hi,
    I hopped distros until I found Arch and since then I've been hopping DE/WMs until I tried Awesome the other day. Although it may be a little premature to say I've settled, I really like it.
    One reason I hadn't tried it sooner was because it wasn't in the default repos; I assumed it wasn't very popular or maybe dwm was better. Now I see it's because it depends on the AUR package cairo-xcb which sounds like it's no longer developed/supported; does that mean Awesome will be changed to no longer depend on it? Or will Awesome users run into issues in the future? Basically can I settle down now? Or is Awesome's future not so bright?
    Thanks

    Read this, the link within, and the blog post link in comment 24 from awesome's creator:
    http://mailman.archlinux.org/pipermail/ … 17852.html
    awesome will remain in the AUR until the software that it depends on is stable or it drops xcb as its windowing backend. It is very popular though, so I doubt that it's going anywhere.
    --EDIT--
    Scroll down to "Tue, 1 Jun 2010" or search for XCB in the blog.
    Last edited by skottish (2011-07-16 19:39:31)

  • Awesome menu center align

    Hi guys, just wondering if anyone knows if its possible to center align the awesome menu (mod4+w one).  I have looked everywhere and can't seem to find a solution.
    Thanks!

    Hello specialblend, and welcome on board. Could you elaborate what you mean with center align? Do you simply mean centering the menu on screen? That would be as easy as modifying /usr/share/awesome/lib/awful/menu.lua, at line ~320 (~144 in the git version), you could remove / comment out the lines marked with a "-" and add the lines marked with a "+":
    _menu.x = _menu.parent.x + w + _menu.width > screen_w and
    _menu.parent.x - _menu.width or _menu.parent.x + w
    else
    - if m_coords == nil then
    - m_coords = capi.mouse.coords()
    - m_coords.x = m_coords.x + 1
    - m_coords.y = m_coords.y + 1
    - end
    - _menu.y = m_coords.y < s_geometry.y and s_geometry.y or m_coords.y
    - _menu.x = m_coords.x < s_geometry.x and s_geometry.x or m_coords.x
    - _menu.y = _menu.y + _menu.height > screen_h and
    - screen_h - _menu.height or _menu.y
    - _menu.x = _menu.x + _menu.width > screen_w and
    - screen_w - _menu.width or _menu.x
    + _menu.x = (screen_w - _menu.width)/2
    + _menu.y = (screen_h - _menu.height)/2
    end
    _menu.wibox.x = _menu.x
    _menu.wibox.y = _menu.y
    The code in this sections checks whether the menu in question has a parent. If not (the else block), we assign the half the screen width, resp. height minus the menu width, resp. height to the menus x/y coordinates. Yours could look slightly different when you are using the stable package.
    (To comment out a line in lua, preceed it with a "--")
    Last edited by Wey (2012-10-29 08:20:52)

  • Awesome becoming a whole lot less... awesome?

    For a while awesome has been my favorite manager, and I really enjoy the new features that are implemented.  However, version changes make configuration a pain in the #^@ and thus I am left with awesome 3.4 seeing no wibox and having improperly functioning window management.  The whole thing slows down quite a bit.  I tried my best to port my rc.lua over to version 3.4 using the new signals but it didn't work (management is better, but no wibox).
    Anyone want to share any tips that I haven't thought of?  Anyone else frustrated like me at being unable to use one of the best wms ever?

    GGLucas wrote:
    You say config changes every month, but I left my config unchanged for the better part of this year, and only had to really adapt it just now - I don't think that's unacceptable.
    Would you rather the developers lock you into a suboptimal way of doing things ? I would imagine archers in particular wouldn't like that "debian stable" approach to doing things.
    In the good old days of early awesome3-git, you had to rewrite your config four times a week, and you liked it ! You youngsters don't know what a real window manager is like
    I was really thinking about getting a Debian Stable on my machine
    I don't hate changes. I hate undocumented (or not well documented) changes. The awesome 3.3 to 3.4 wiki page is really not enough for a non-programmer like me (maybe a non-programmer should not use awesome in the first place...)
    Every time awesome pushes out an upgrade, I will have to search the net for tips on how to get my old functionalities back, e.g., floating windows, windows on top... I have to admit that I do have the extra hours to fiddle with the config, that's why I always end up using this evil awesome wm

  • Awesome vs. Xmonad

    I've been thinking about trying a tiling window manager (I currently use Openbox) and am thinking especially about trying awesome and xmonad.
    I mostly use 5 main apps (ranked in how much I use them, 1 being the most):
    1. Urxvt
    2. Firefox
    3. Songbird
    4. Pidgin
    5. XChat
    I'm looking for it to have a lot of configurability as far as hotkeys go, I want to try and use the mouse as little as possible.
    Feel free to recommend any other WMs if you want.

    I like xmonad alot personally. 
    Sounds like you run some of the same stuff as me constantly, not that it matters.  I am sitting here with Firefox, three urxvtc terminals and thunderbird open, with pidgin and deluge sitting in my tray.
    I really like in tiling window managers being able to have my browser in its nice little 65% pane, and my three 80 char wide terminal windows on the right-hand side of the screen showing as many lines as they can with no wasted space.  I have pidgin easily set to auto float above everything when I bring it up for something, and then put it away, and it doesn't change my nice stable layout of everything else.  I can hop to other workspaces to do other things and come back to my main WS with my nice happy setup.  I can even "swap screens" with what's on my television, open something, and then swap back. 
    Plus Haskell is pretty fun to mess with really.  If you don't want to learn it, it is easy to base your config on others that are available (which is what I initially did), but I have been working through some Haskell tutorials just because it is a pretty neat language.
    Awesome can act weird when you misconfigure its file though.  So can everything else, really...  But I found that Awesome handled typo's and problems less gracefully than xmonad most of the time.  Xmonad would just chugging with your old config if you typo'd in your new config, unless you messed something up fierce.  Sometimes Awesome would check my file and say it was fine, and then just blow up when I tried to load it.  I am sure that would go away if I learned the syntax better, but I preferred xmonad's more graceful way of dealing with most of my learning mistakes.
    Awesome works though.  It's handy if you like clicking on your bar, and if you prefer configuring in lua (and fixing your config often on update, if you don't hold back the package).  It's notification daemon is a neat touch, and the customizable widgets are sort of fun to play with (after you choose which of the three libraries you want to use to manage updating them, and cross your fingers that it will still be there next release).  I didn't run it terribly long, since I missed xmonad when I tried it and decided to come back and stop trying lots of wm's.  Awesome has pretty sane defaults, I like that.  YMMV.

  • Reiser4 filesystem for /var: Is it stable enough?

    I've read horror stories about the new reiser4 filesystem, where users have encountered significant data loss, alongside others who have used it for quite some time without issues.  So I thought I'd start this thread to spark a little discussion about if this new filesystem is mature and robust enough to actually use on a regular basis.  I plan on replacing my reiserfs-formatted /var partition with reiser4 if you guys think it's a worthwhile feat.  If it isn't ... well ... I know what y'all have to say about the importance of keeping a clean /var/lib/pacman/local ...
    BTW - I thought I would also mention that I split up my drive into many partitions like a more "traditional" linux OS, using ext2 for /boot, ext3 for /home (so windows ext3 drivers can r/w), reiserfs for /var, and ext4 for /, and the advantages are awesome.  It's lovely to have access to my files in windows (especially /boot/grub/menu.lst), and the response time with pacman is very noticable!  I can run circles around my Pentium 4 machine that I have yet to convert, and this machine is a 1 GHz P3 mobile-based laptop with an IDE disk, wooo
    Last edited by synthead (2009-12-02 15:54:53)

    It's been stable for me.

  • I have a MacBook Pro (15-inch, Late 2008) and am currently running Snow Leopard 10.6.8. I would like to know which is the most stable upgrade for my model. I have read some reviews of Maverick and Yosemite making the older macs slower. Is this true?

    I have a MacBook Pro (15-inch, Late 2008), Intel Core 2 Duo 2.53 GHz, 4GB Memory. and am currently running Snow Leopard 10.6.8.
    I would like to know which is the most stable upgrade for my model? Mountain Lion, Mavericks or Yosemite?
    When I had gone to the apple care centre in India a few months ago to upgrade my OSX to Mountain Lion, I was told that considering my macbook pro's specs, upgrading it would just make it less efficient, and that I should stick to Snow Leopard unless I consider buying a newer mac that would benefit from it. Is this true? I find it a bit hard to believe. Which update is most recommended?
    I also notice that my mac has gotten considerably slower. While using chrome, it buffers and struggles with even just 5 tabs open. Could this have something to do with my current ios? As a precaution, I have always been making sure I have enough free space on disk i.e around 70 - 100 free out of 250GB.
    Any advice is appreciated.
    Thanks in advance.

    Mavericks is no longer available from the App Store, so your choice is Yosemite. One option is to create a new partition (~30- 50 GB), install the new OS, and ‘test drive’ it. If you like/don’t like it it, you can then remove the partition. Do a backup before you do anything. By doing this, if you don’t like it you won't have to go though the revert process.
    Check to make sure your applications are compatible.
    Application Compatibility
    Applications Compatibility (2)

  • Is Cool 'n Quiet stable?

    I run a K8N Neo2 Platinum (MS-7025) with 1.4 bios, 3800+ NewCastle CPU and Kingston HyperX 400MHz memory.
    The setup works like a charm, but when I enable "Cool 'n Quiet" it seems to cause lock-ups and reboots.
    The system is NOT overclocked, everything is set to AUTO in BIOS, except for memory which has been set to a bit slower settings than SPD reports.
    When I have Core Center open on screen to watch what Cool 'n Quiet does, it seems like most of the time it reports 200MHz x 5.0 at idle, but when I start up an application, it can peak to 380MHz x 12 ?  
    Neither memory nor CPU should be able to handle that kind of FSB clock, so is it a system bug that the clock peaks at way above 200MHz?  I really don't DARE to use "Cool 'n Quiet" for that reason, I need a stable system that doesn't hang or reboot in the middle of working.
    Later,
    Anders.

    Quote
    Originally posted by mrpiercer
    {snip} both Core Center and cpu-z reports huge momentaneous jumps that takes the FSB to new heights.. Way over 300MHz in extremely short periods. Could it be that both applications simply gets tricked to think that the FSB is changed?  If so, how come the systems locks up dead hard WITH C&Q enabled, but never once WITHOUT the C&Q enabled?
    Andres,
    I'm not getting the BSODs but the fluctuations do have me concerned. This thread is interesting. Blue screen caused by Vcore flucuations?
    Raising the Vcore from 1.50 to 1.525 or 1.55 does seem to help stabilize my system but the CPU temp goes up. I've got a Thermalright XP-90 on the way so heat shouldn't be a problem.
    ===============================================
    What I've found so far...
    Cool & Quiet disabled in the BIOS.
    Start CoreCenter running.
    Start Speedfan running.
    Start WCPUCLK
    Put a full load on the CPU. (seti@home)
    Just moving the mouse around causes a few alarming fluctuations seen in CoreCenter.
    WCPUCLK doesn't register the fluctuations but I'm not getting BSODs.
    1) Open CC. Click on CoreCenter , the program title button.
    2) Click User
    3) Set the fans on high
    4) Click Apply.
    Now the Vcore and FSB stabilize.
    It appears that C & Q is turned off.
    ===============================================
    It looks like what the other guys have been saying...Don't use CoreCenter except as a reference to help set up other programs like MBM and SpeedFan. Hmmm...RightMarks RM clock also sounds interesting.
    Having a quieter system with Cool & Quiet turned on in the BIOS is nice. I'll have to do more testing to see if its stable. If C & Q is still causing instability after raising the CPU VID to 1.525 in the BIOS...I'll leave it off...Cie La Vie.
    Later, Conrad

Maybe you are looking for