Adventskalender 14. Dezember 2023 - Teile und Herrsche

Smalltalk
Antworten
dasebastian
Beiträge: 1886
Registriert: 12.07.2020 11:21:17

Adventskalender 14. Dezember 2023 - Teile und Herrsche

Beitrag von dasebastian » 14.12.2023 06:00:32

Teilen...
Hier soll es heute um eine kurze Vorstellung meines Debianawesome-Systems gehen, das wir hier am Papier nachbasteln werden. Soviel zum T(e)ilen.

... und das Herrschen?
Der AwesomeWM ist ein tastaturgetriebener dynamischer Tiler, der dir die volle Kontrolle über so gut wie sämtliche Aspekte deiner Oberfläche gibt. Konfiguriert wird der Fenstermanager in Lua. Ups!

Das Gute daran - du musst Lua nicht beherrschen um über dein System herrschen zu können. Ein bisschen Grübeln reicht schon...

Warum gerade Awesome?!
Die Gründe, sich seine eigene Oberfläche zu basteln sind vielfältig, unzählige Male diskutiert worden und für jeden von uns (mit Überschneidungen) sicher andere. Ganz konkret waren es bei mir die zunehmende Unzufriedenheit mit meinem vorher genutzten Desktop Environment (MATE), das Reflektieren und Überdenken meiner Arbeitsweise am Rechner und sicher auch einfach die Lust, es zu auszuprobieren.

Nachdem ich mich selbst beim Arbeiten am Rechner bewusst beobachtet habe, ist mir klar geworden, dass ich mir um Fenstergrößen eigentlich keinerlei Gedanken machen will. Ich will ganz einfach, dass meine aktuelles Fenster immer möglichst groß ist und wenn ich mehrere brauche, dann sollen sie sich den Raum (meistens) einfach teilen. Bitte kein Herumschieben und an Fenstern zerren!

Und nachdem es mir irgendwann auch zu blöd wurde, mit meinem Laptop immer auch noch eine Mouse mitzuschleppen, sah ich mich nach tastaturgetriebenen Programmen um. Das mal zusammengenommen brachte mich schon zu dynamischen Tilern.

Awesome wurde es dann, weil ich über ein Video gestolpert war, das mir gefallen hat, es hat mich einfach angesprochen. Der Fenstermanager bringt eine gut funktionierende Taskbar mit, die sich auch ganz gut editieren lässt und - das war für mich der Knaller - eine Art Hilfesystem. Doch dazu ein andermal mehr... Die Dokumentation ist - ich drücke mich vorsichtig aus - ausführlich und auch sonst findet man im Netz jede Menge Hacks. Insgesamt hat man jegliche Freiheiten, die man sich nur wünschen kann, steigt aber nicht ganz bei Null ein. Im Endeffekt war es dann Bauchsache.

Doch genug der langen Worte, legen wir los.

4491

Installation
An Vorarbeit brauchen wir zuerst natürlich mal ein Debian Grundystem inklusive der System-Utils (tasksel). Und richtig, ich installiere nicht im Expertenmodus, ich stelle mir einfach ein Bier auf die Entertaste. Nachdem das erledigt ist, installieren wir für mein Awesome-Grundsystem folgende Abhängigkeiten:

Code: Alles auswählen

Grundlegendes:
    apt install xorg lxpolkit iwd awesome lxterminal

Benötigtes:
    apulse alsa-utils avahi-daemon dosfstools fd-find firefox-esr firefox-esr-l10n-de fzf galculator gsimplecal
    htop libglib2.0-bin micro mpv ntfs-3g rofi scrot suckless-tools systemd-resolved trash-cli xautolock
    
Benötigtes ohne Schnickschnack (no-install-recommends):
    gir1.2-notify-0.7 lf udiskie unzip volumeicon-alsa
    
Kurz zur Programmauswahl. Mein Rechner ist ein klassischer Bürorechner, das heisst, ich habe noch mehr installiert, ich bin selbständig und brauche das Zeug einfach. Prinzipiell mag ich schlank und spartanisch aber, weil was ich nicht habe, kann nicht kaputtgehen.

Vielen wird hier aber zB. ein grafischer Dateimanager (das ist bei mir ja "nur" Debianlf) fehlen oder ein grafisches Frontend für Debianiwd - das Netzwerken erledige ich (ein Dank geht raus an Margot) mit einem selbstgebauten Deb von iwgtk.

Und fast hätte ich's vergessen, wir brauchen auch noch die Hack Nerd Font und die awesomewm-font.ttf in ~/.local/share/fonts.

Nachdem das erledigt ist, geht es endlich an die

Konfiguration von Awesome
Zuallererst braucht es

Code: Alles auswählen

mkdir -p ~/.config/awesome/awsmwidgets
Im Ordner awsmwidgets legen wir ein minimal modifiziertes Lua-Skript aus Github (~/.config/awesome/awsmwidgets/batterywidget.lua) ab, das uns später den Akkustand anzeigen wird. Bei Fragen dazu kann ich das gerne nachreichen.

Und nun zur eigentlichen Konfiguration von Awesome, den beiden Dateien rc.lua und theme.lua.

Vorneweg, vor allem in der rc.lua habe ich mit der Zeit kräftig herumgekürzt und -geschachtelt, vor allem habe ich das grafische Menü sowie die meisten Mouse-Definitionen rausgeschmissen. Eine vollständige Dokumentation oder ein Vergleich der vanilla rc.lua mit meiner persönlichen würde hier sowohl den Rahmen als auch mein Wissen sprengen. Sehr vieles war Githubpiraterie, sehr viel anderes einfach Versuch und Irrtum.

Sollten konkrete Fragen oder Alternativen aufkommen, kann das ja vielleicht in einer Diskussion besprochen werden. Einige -- ## Kommentare in der rc.lua werde ich machen. Los geht's:

Code: Alles auswählen


-- █▀▄ ▄▀▀   █   █ █ ▄▀▄    ~/.config/awesome/rc.lua
-- █▀▄ ▀▄▄ ▄ █▄▄ ▀▄█ █▀█    https://awesomewm.org/doc/api/

-- https://awesomewm.org/doc/api/documentation/05-awesomerc.md.html

-- libraries & widgets
local gears = require("gears")
local awful = require("awful")
require("awful.autofocus")
local wibox = require("wibox")
local beautiful = require("beautiful")
local naughty = require("naughty")
local hotkeys_popup = require("awful.hotkeys_popup")
require("awful.hotkeys_popup.keys")

-- errors
if awesome.startup_errors then
    naughty.notify({ preset = naughty.config.presets.critical,
                     title = "Oops, there were errors during startup!",
                     text = awesome.startup_errors })
end

do
    local in_error = false
    awesome.connect_signal("debug::error", function (err)
        if in_error then return end
        in_error = true
        naughty.notify({ preset = naughty.config.presets.critical,
                         title = "Oops, an error happened!",
                         text = tostring(err) })
        in_error = false
    end)
end

-- definitions
beautiful.init("/home/sebastian/.config/awesome/theme.lua")
terminal = "lxterminal"
editor = os.getenv("EDITOR") or "micro"
editor_cmd = terminal .. " -e " .. editor
modkey = "Mod4"

-- layouts
-- ## Ich brauche praktisch nur zwei Layouts, Vollbild u. Master-Stack.
-- ## Floating schiebe ich entweder aktiv per Tastenkombination an oder per Rule:
awful.layout.layouts = {
    awful.layout.suit.max,
    awful.layout.suit.tile,
}

-- bar, barnavigation & wallpaper
mytextclock = wibox.widget.textclock(" %d/%m/%Y %H:%M ", 60)

local taglist_buttons = gears.table.join(
                    awful.button({ }, 1, function(t) t:view_only() end))

local tasklist_buttons = gears.table.join(
                     awful.button({ }, 1, function (c)
                                              if c == client.focus then
                                                  c.minimized = true
                                              else
                                                  c:emit_signal(
                                                      "request::activate",
                                                      "tasklist",
                                                      {raise = true}
                                                  )
                                              end
                                          end))

local function set_wallpaper(s)
    if beautiful.wallpaper then
        local wallpaper = beautiful.wallpaper
        if type(wallpaper) == "function" then
            wallpaper = wallpaper(s)
        end
        gears.wallpaper.maximized(wallpaper, s, true)
    end
end

screen.connect_signal("property::geometry", set_wallpaper)

-- ## Deshalb die Awesome-Font, ich brauche allerdings nur 4 Arbeitsplätze/Tags:
awful.screen.connect_for_each_screen(function(s)
    set_wallpaper(s)
    awful.tag({ "A", "W", "S", "M" }, s, awful.layout.layouts[1])
    s.mylayoutbox = awful.widget.layoutbox(s)

    s.mytaglist = awful.widget.taglist {
        screen  = s,
        filter  = awful.widget.taglist.filter.all,
        buttons = taglist_buttons
    }

    s.mytasklist = awful.widget.tasklist {
        screen  = s,
        filter  = awful.widget.tasklist.filter.currenttags,
        buttons = tasklist_buttons
    }

    s.mywibox = awful.wibar({ position = "top", screen = s })

    s.mywibox:setup {
        layout = wibox.layout.align.horizontal,
        { -- left widgets
            layout = wibox.layout.fixed.horizontal,
            s.mytaglist,
        },
          -- middle widget
        s.mytasklist, 
        { -- right widgets
            layout = wibox.layout.fixed.horizontal,
            wibox.widget.systray(),
-- ## Hier jetzt das Batterywidget, das wir zuvor angelegt haben:
            require("awsmwidgets.batterywidget") {},
            mytextclock,
            s.mylayoutbox,
        },
    }
end)

-- keys
globalkeys = gears.table.join(
    
    -- awesome
    awful.key({ modkey },            "l",     function () awful.spawn.with_shell("slock") end,
              {description = "lock screen", group = "awesome"}),
    awful.key({ modkey,           }, "h",      hotkeys_popup.show_help,
              {description="help keybindings", group="awesome"}),
    awful.key({ modkey, }, "Escape", function () awful.util.spawn("rofi -show power:/home/sebastian/.config/rofi/rofipowermanager -theme /home/sebastian/.config/rofi/rofiruntheme.rasi") end,
              {description="power", group="awesome"}),
    awful.key({ modkey, "Control" }, "r", awesome.restart,
              {description = "reload gui", group = "awesome"}),
    awful.key({ modkey, "Control"   }, "q", awesome.quit,
              {description = "quit gui", group = "awesome"}),
-- ## Dmenu als Runprompt (Backup, falls Rofi mal nicht wollen sollte):
    awful.key({ modkey }, "F2",   function () awful.util.spawn("dmenu_run -fn 'Monospace-14' -p drun:") end,
              {description = "drun", group = "awesome"}),

    -- clients
    awful.key({ modkey,           }, "Tab",
        function ()
            awful.client.focus.byidx( 1)
        end,
        {description = "nächster client", group = "clients"}
    ),
    awful.key({ modkey, }, "^",
        function ()
            awful.client.focus.byidx(-1)
        end,
        {description = "vorheriger client", group = "clients"}
    ),

    -- launchers
-- ## Wichtigste Programme:
    awful.key({ modkey           }, "Return", function () awful.spawn(terminal) end,
              {description = "terminal",    group = "launchers"}),
    awful.key({ modkey },            "Print", function () awful.spawn.with_shell("scrot -s -q 85 '/home/sebastian/dwn/scrot_%Y%m%d_%H%M%S.png'") end,
              {description = "scrot select", group = "launchers"}),
    awful.key({ modkey, "Control" }, "Print", function () awful.spawn.with_shell("scrot -d 5 -q 85 '/home/sebastian/dwn/scrot_%Y%m%d_%H%M%S.png'") end,
              {description = "scrot 5sec", group = "launchers"}),
    awful.key({},            "Print",         function () awful.spawn.with_shell("scrot -q 85 '/home/sebastian/dwn/scrot_%Y%m%d_%H%M%S.png'") end,
              {description = "scrot",     group = "launchers"}),
    awful.key({ modkey, "Control" }, "e", function () awful.spawn.with_shell("udiskie-umount --detach -a") end,
              {description = "eject all media", group = "launchers"}),
-- ## Mein Notizzettel:              
    awful.key({ modkey }, "p", function () awful.spawn(terminal.." -e 'micro /home/sebastian/dox/zeuch/pin.txt'") end,
              {description = "pinzettel", group = "launchers"}),
    awful.key({ modkey },            "k",     function () awful.util.spawn("gsimplecal") end,
              {description = "kalender",       group = "launchers"}),
    awful.key({ modkey },     "m",     function () awful.spawn(terminal.." -e 'micro'") end,
              {description = "micro", group = "launchers"}),
    awful.key({ modkey },            "r",     function () awful.util.spawn("galculator") end,
              {description = "rechner",       group = "launchers"}),
    awful.key({ modkey },            "i",     function () awful.util.spawn("iwgtk") end,
              {description = "iwgtk",       group = "launchers"}),
-- ## Mein Linux-Schummelzettel:
    awful.key({ modkey },            "c",     function () awful.spawn(terminal.." -e 'less dox/syszeug/cstx'") end,
              {description = "cheatsheet",       group = "launchers"}),

    -- layout
    awful.key({ modkey,           }, "+",     function () awful.tag.incmwfact( 0.05)          end,
              {description = "verbreitere master", group = "layout"}),
    awful.key({ modkey,           }, "-",     function () awful.tag.incmwfact(-0.05)          end,
              {description = "verschmälere master", group = "layout"}),
    awful.key({ modkey,           }, "space", function () awful.layout.inc( 1)                end,
              {description = "layoutwechsel", group = "layout"}),

    -- navigation
-- ## Schnellzugriff auf meine wichtigsten Ordner:
    awful.key({ modkey, "Mod1" },     "b",     function () awful.spawn(terminal.." -e 'lf /home/sebastian/dox/bh/2023'") end,
              {description = "buchhaltung", group = "navigation"}),
    awful.key({ modkey, "Mod1" },     "d",     function () awful.spawn(terminal.." -e 'lf /home/sebastian/dwn/'") end,
              {description = "dwn", group = "navigation"}),
    awful.key({ modkey, "Mod1" },     "s",     function () awful.spawn(terminal.." -e 'lf /home/sebastian/dox/syszeug/'") end,
              {description = "syszeug", group = "navigation"}),
    awful.key({ modkey, "Mod1" },     "z",     function () awful.spawn(terminal.." -e 'lf /home/sebastian/dox/zeuch/'") end,
              {description = "zeuch", group = "navigation"}),
    awful.key({ modkey, "Mod1" },     "x",     function () awful.spawn(terminal.." -e 'lf /home/sebastian/dox/'") end,
              {description = "dox", group = "navigation"}),
    awful.key({ modkey, "Mod1" },     "v",     function () awful.spawn(terminal.." -e 'lf /home/sebastian/dox/vlgn/'") end,
              {description = "vorlagen", group = "navigation"}),
    awful.key({ modkey, "Mod1" },     "p",     function () awful.spawn(terminal.." -e 'lf /home/sebastian/pix/'") end,
              {description = "pix", group = "navigation"}),
    awful.key({ modkey, "Mod1" },     "j",     function () awful.spawn(terminal.." -e 'lf /home/sebastian/dox/jobs/'") end,
              {description = "jobs", group = "navigation"}),
    awful.key({ modkey, "Mod1" },     "m",     function () awful.spawn(terminal.." -e 'lf /media/sebastian/'") end,
              {description = "media", group = "navigation"}),
    awful.key({ modkey, "Mod1" },     "c",     function () awful.spawn(terminal.." -e 'lf /home/sebastian/.config/'") end,
              {description = "configs", group = "navigation"}),
    awful.key({ modkey, "Mod1" },     "t",     function () awful.spawn(terminal.." -e 'lf /home/sebastian/.local/share/Trash/files/'") end,
              {description = "trash", group = "navigation"}),
    awful.key({ modkey, "Mod1" },     "h",     function () awful.spawn(terminal.." -e 'lf /home/sebastian/'") end,
              {description = "home", group = "navigation"}),

    -- rofi
-- ## Rofi erledigt bei mir so gut wie alles: Powermenü, Lesezeichen für den Browser, Websuche, Man-Suche,
-- ## Programmlauncher + Fensterwechsler, Dateisuche und Schnellzugriff auf wichtigste Konfigurationsdateien:
    awful.key({ modkey },            "b",     function () awful.util.spawn("/home/sebastian/.config/rofi/rofibookmarks") end,
              {description = "bookmarks", group = "rofi"}),
    awful.key({ modkey },            "w",     function () awful.util.spawn("/home/sebastian/.config/rofi/rofiwebsearch") end,
              {description = "websuche", group = "rofi"}),
    awful.key({ modkey },            "ß",     function () awful.util.spawn("/home/sebastian/.config/rofi/rofimans") end,
              {description = "manpages", group = "rofi"}),
    awful.key({ "Control" }, "space",   function () awful.util.spawn("rofi -combi-modi window,drun -show combi") end,
              {description = "progs", group = "rofi"}),
    awful.key({ modkey },            "s",     function () awful.util.spawn("/home/sebastian/.config/rofi/rofifinder") end,
              {description = "suche", group = "rofi"}),
    awful.key({ modkey },            "e",     function () awful.util.spawn("/home/sebastian/.config/rofi/rofiedits") end,
              {description = "edit configs", group = "rofi"}),

    -- tag
    awful.key({ modkey,           }, "Left",   awful.tag.viewprev,
              {description = "zeige vorherigen tag", group = "tag"}),
    awful.key({ modkey,           }, "Right",  awful.tag.viewnext,
              {description = "zeige nächsten tag", group = "tag"})
)

    -- more clients
    clientkeys = gears.table.join(
    awful.key({ modkey,           }, "f",
        function (c)
            c.fullscreen = not c.fullscreen
            c:raise()
        end,
        {description = "fenster fullscreen", group = "clients"}),
    awful.key({ modkey }, "q",      function (c) c:kill()                         end,
              {description = "quit client", group = "clients"}),
    awful.key({ modkey, "Control" }, "Right",  awful.client.floating.toggle                     ,
              {description = "fenster (un)floating", group = "clients"}),
    awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end,
              {description = "aktiven auf master", group = "clients"}),
    awful.key({ modkey,           }, "Up",
        function (c)
            c.maximized = not c.maximized
            c:raise()
        end ,
        {description = "(un)maximize", group = "clients"})
)

    -- tagkeys
for i = 1, 4 do
    globalkeys = gears.table.join(globalkeys,
        awful.key({ modkey }, "#" .. i + 9,
                  function ()
                        local screen = awful.screen.focused()
                        local tag = screen.tags[i]
                        if tag then
                           tag:view_only()
                        end
                  end,
                  {description = "zeige tag", group = "tag"}),
        
        awful.key({ modkey, "Control" }, "#" .. i + 9,
                  function ()
                      if client.focus then
                          local tag = client.focus.screen.tags[i]
                          if tag then
                              client.focus:move_to_tag(tag)
                          end
                     end
                  end,
                  {description = "pin client an tag", group = "tag"})
    )
end

clientbuttons = gears.table.join(
    awful.button({ }, 1, function (c)
        c:emit_signal("request::activate", "mouse_click", {raise = true})
    end),
    awful.button({ modkey }, 1, function (c)
        c:emit_signal("request::activate", "mouse_click", {raise = true})
        awful.mouse.client.move(c)
    end),
    awful.button({ modkey }, 3, function (c)
        c:emit_signal("request::activate", "mouse_click", {raise = true})
        awful.mouse.client.resize(c)
    end)
)

root.keys(globalkeys)

-- rules
awful.rules.rules = {
    -- all clients will match this rule
    { rule = { },
      properties = { border_width = beautiful.border_width,
                     border_color = beautiful.border_normal,
                     focus = awful.client.focus.filter,
                     raise = true,
                     keys = clientkeys,
                     buttons = clientbuttons,
                     screen = awful.screen.preferred,
                     placement = awful.placement.no_overlap+awful.placement.no_offscreen
     }
    },
    -- floating clients
    { rule_any = {
        instance = {
          "DTA",
          "pinentry",
          "iwgtk",
        },
        class = {
          "Galculator",
          "Gpick",
          "MessageWin"},
        name = { },
        role = {
          "AlarmWindow",
          "ConfigManager",
          "pop-up",
        }
      },
      properties = { floating = true,
                     ontop = true }},
     }

-- signals
client.connect_signal("manage", function (c)
    if not awesome.startup then awful.client.setslave(c) end
    if awesome.startup
      and not c.size_hints.user_position
      and not c.size_hints.program_position then
        awful.placement.no_offscreen(c)
    end
end)

-- sloppy focus
client.connect_signal("mouse::enter", function(c)
   c:emit_signal("request::activate", "mouse_enter", {raise = false})
end)

client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end)
client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)

-- eof

Gut, das Grundlegendste wäre gemacht, nun wird noch aufgehübscht und zurechtgeschnitten:

Code: Alles auswählen

-- ▀█▀ █▄█ ██▀ █▄ ▄█ ██▀   █   █ █ ▄▀▄  ~/.config/awesome/rc.lua
--  █  █ █ █▄▄ █ ▀ █ █▄▄ ▄ █▄▄ ▀▄█ █▀█

local themes_path = require("gears.filesystem").get_themes_dir()
local dpi = require("beautiful.xresources").apply_dpi

-- theme & wallpaper
local theme = {}
theme.wallpaper = "/home/sebastian/dox/syszeug/wp/wpawdebgnu.jpg"

-- font & taskbar
theme.font      =  "Hack Nerd Font Mono Regular 12"
theme.fg_normal  = "#DCDCCC"
theme.fg_focus   = "#A5C33F"
theme.fg_urgent  = "#CC9393"
theme.bg_normal  = "#2F343F"
theme.bg_focus   = "#1C1C1C"
theme.bg_urgent  = "#3F3F3F"
theme.bg_systray = theme.bg_normal

-- taglist
theme.taglist_fg_focus    = "#A5C33F"
theme.taglist_fg_occupied = "#3992af"
theme.taglist_fg_urgent   = "#F06060"
theme.taglist_fg_empty    = "#828282"
theme.taglist_spacing     = 2
theme.taglist_font = "awesomewm-font 13"
theme.taglist_squares_sel   = themes_path .. "zenburn/taglist/squarefz.png"
theme.taglist_squares_unsel = themes_path .. "zenburn/taglist/squarez.png"

-- borders
theme.useless_gap   = dpi(3)
theme.border_width  = dpi(1)
theme.border_normal = "#3F3F3F"
theme.border_focus  = "#6F6F6F"
theme.border_marked = "#CC9393"

-- mouse
theme.mouse_finder_color = "#CC9393"

-- layouticons
theme.layout_tile       = themes_path .. "zenburn/layouts/tile.png"
theme.layout_tileleft   = themes_path .. "zenburn/layouts/tileleft.png"
theme.layout_tilebottom = themes_path .. "zenburn/layouts/tilebottom.png"
theme.layout_tiletop    = themes_path .. "zenburn/layouts/tiletop.png"
theme.layout_fairv      = themes_path .. "zenburn/layouts/fairv.png"
theme.layout_fairh      = themes_path .. "zenburn/layouts/fairh.png"
theme.layout_spiral     = themes_path .. "zenburn/layouts/spiral.png"
theme.layout_dwindle    = themes_path .. "zenburn/layouts/dwindle.png"
theme.layout_max        = themes_path .. "zenburn/layouts/max.png"
theme.layout_fullscreen = themes_path .. "zenburn/layouts/fullscreen.png"
theme.layout_magnifier  = themes_path .. "zenburn/layouts/magnifier.png"
theme.layout_floating   = themes_path .. "zenburn/layouts/floating.png"
theme.layout_cornernw   = themes_path .. "zenburn/layouts/cornernw.png"
theme.layout_cornerne   = themes_path .. "zenburn/layouts/cornerne.png"
theme.layout_cornersw   = themes_path .. "zenburn/layouts/cornersw.png"
theme.layout_cornerse   = themes_path .. "zenburn/layouts/cornerse.png"

return theme
Fast fertig. Wir brauchen noch die Autostarts. Anfangs hatte ich die auch in der rc.lua, aus mehreren Gründen habe ich das dann aber klassisch in die ~/.xinitrc ausgelagert:

Code: Alles auswählen

#!/bin/sh

#    ▀▄▀ █ █▄ █ █ ▀█▀ █▀▄ ▄▀▀   ~/.xinitrc
#  ▄ █ █ █ █ ▀█ █  █  █▀▄ ▀▄▄

xset -dpms s off &
/usr/bin/lxpolkit &
xautolock -time 5 -locker slock &
volumeicon &
udiskie &
exec awesome
Keine Energiesparfunktionen, die Bildschirmsperre übernimmt slock aus den Debiansuckless-tools, das Volumicon für Alsa habe ich mir gegönnt und Debianudiskie organisiert meine Wechseldatenträger für mich.

Nachdem ein Postinstall-Skript dann noch meine restlichen Konfigurationsdateien für mich an die richtigen Stellen setzt und Nichtgebrauchtes wegpurged - ist der Rest:

4492

Tilen und herrschen.

Benutzeravatar
mn77de
Beiträge: 155
Registriert: 23.11.2003 16:53:53
Wohnort: Übersee
Kontaktdaten:

Re: Adventskalender 14. Dezember 2023 - Teile und Herrsche

Beitrag von mn77de » 14.12.2023 08:49:52

Danke für dieses Türchen :THX:

Ja, ich mag auch gerne alle Fenster offen und gut aufgeteilt im Blick haben. Das Gruppieren von Fenstern in Arbeitsflächen/Screens finde ich extrem sinnvoll. Zudem teile ich die Fenster gerne übersichtlich auf beide Monitore auf. Herumschieben und Überlagern von Fenstern finde ich eher nervig.

So finde ich die Idee von Tilern generell absolut genial und bin zwangsläufig schon über awesome gestolpert.
Mein Fazit dazu war allerdings:

Pro
  • Viele Einstellmöglichkeiten
  • Ist sicher ein richtig geniales Tool
Contra
  • Zu viel Einarbeitungszeit
  • Ich vermisse mein Mate-Panel
  • Und ich vermisse meine Arbeitsflächen.
  • Mein Bildschirmhintergrund darf auch gerne zu sehen sein, wenn auf einem Monitor kein Fenster geöffnet ist.
Effektiv bin ich wieder bei Mate gelandet. Da kann ich die Fenster mit STRG+ALT+<Nummernblocktaste> in die jeweilige Position/Ecke verschieben. Automatisiert wäre mir das natürlich lieber.
OpenSource! :THX:

dasebastian
Beiträge: 1886
Registriert: 12.07.2020 11:21:17

Re: Adventskalender 14. Dezember 2023 - Teile und Herrsche

Beitrag von dasebastian » 14.12.2023 09:17:34

mn77de hat geschrieben: ↑ zum Beitrag ↑
14.12.2023 08:49:52
Contra
  • Zu viel Einarbeitungszeit
  • Ich vermisse mein Mate-Panel
  • Und ich vermisse meine Arbeitsflächen.
  • Mein Bildschirmhintergrund darf auch gerne zu sehen sein, wenn auf einem Monitor kein Fenster geöffnet ist.
Die Einarbeitungszeit ist ein Punkt. Generell bei Fenstermanagern. Hat ja (gute) Gründe, warum es "fertige" DEs gibt. :lol:

Prinzipiell kann man natürlich auch hier auf das eingebaute Panel verzichten und es zB. gegen Debiantint2 oder Debianpolybar austauschen. Die muss man halt auch alle konfigurieren...

Arbeitsflächen gibt es hier n a t ü r l i c h, die sind oben links (awsm) - ohne Arbeitsflächen könnte ich gar nicht.

Bildschirmhintergrund - ich habe jetzt kein Multimonitorsetup, es würde mich aber wundern, wenn da keines gezeigt wird, wenn kein Fenster offen ist. Ich glaube sogar, dass Awesome sich mit Multimonisetupmöglichkeiten rühmt. Habe das aber aus mangelnder Notwendigkeit nie verfolgt.

Benutzeravatar
TRex
Moderator
Beiträge: 8086
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: Adventskalender 14. Dezember 2023 - Teile und Herrsche

Beitrag von TRex » 14.12.2023 10:34:34

Multi-Monitor ist überhaupt kein Problem - im Gegenteil, die vorgefertigten Tastenkürzel in der Standard-Config bringen da schon was mit. Super+O zum Verschieben des aktuellen Clients auf den nächsten Monitor, Ctrl+Super+j/k zum Bewegen des Cursors/Fokus zwischen den Bildschirmen. Und natürlich kann man sich noch weitere dazu schreiben.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
schorsch_76
Beiträge: 2544
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: Adventskalender 14. Dezember 2023 - Teile und Herrsche

Beitrag von schorsch_76 » 14.12.2023 10:58:56

Funktioniert Awesome auch mit XWayland oder ist awesome "x11 only"?

Liffi
Beiträge: 2306
Registriert: 02.10.2004 01:33:05

Re: Adventskalender 14. Dezember 2023 - Teile und Herrsche

Beitrag von Liffi » 14.12.2023 11:06:21

schorsch_76 hat geschrieben: ↑ zum Beitrag ↑
14.12.2023 10:58:56
Funktioniert Awesome auch mit XWayland oder ist awesome "x11 only"?
awesone unterstützt Wayland nicht und ist auch nicht geplant. Ich bin deshalb auf Qtile umgestiegen, aber awesome war schon noch stabiler muss ich sagen.

dasebastian
Beiträge: 1886
Registriert: 12.07.2020 11:21:17

Re: Adventskalender 14. Dezember 2023 - Teile und Herrsche

Beitrag von dasebastian » 14.12.2023 12:22:52

Debianxwayland soll es X-Programmen zwar ermöglichen, auf Wayland zu laufen, aber wie sollte dann die Session eigentlich gestartet werden. Da spießt es sich wahrscheinlich. Ohne von Wayland eine Ahnung zu haben.

Die immerwieder genannte allbekannte Normalternative sollte wohl Debiansway sein.

Benutzeravatar
mn77de
Beiträge: 155
Registriert: 23.11.2003 16:53:53
Wohnort: Übersee
Kontaktdaten:

Re: Adventskalender 14. Dezember 2023 - Teile und Herrsche

Beitrag von mn77de » 14.12.2023 13:25:19

Puh ...
Aufgrund des Beitrags habe ich mir Awesome wieder installiert und damit nun etwas herum experimentiert. 8O
Alles frei konfigurieren zu können finde ich mega, allerdings erschlägt mich der Umfang gerade etwas. :lol:

Jedenfalls, zwei Monitore tun, Hintergrundbild tut, mehrere Arbeitsflächen tun, Hotkeys tun, ... und das Ding ist verdammt schnell!

Ich werde Awesome definitiv eine zweite Chance geben und kann mir vorstellen, dass es zukünftig ein wichtiges Tool für mich wird.
Allerdings brauche ich da wohl erstmal einen freien Tag, um mich richtig einzuarbeiten und alles nach meinen Vorlieben zu konfigurieren. :roll:
Derweil tut Mate auch gut. :lol:
OpenSource! :THX:

dasebastian
Beiträge: 1886
Registriert: 12.07.2020 11:21:17

Re: Adventskalender 14. Dezember 2023 - Teile und Herrsche

Beitrag von dasebastian » 14.12.2023 13:57:59

mn77de hat geschrieben: ↑ zum Beitrag ↑
14.12.2023 13:25:19
Puh ...
Cool!! Kannst dich natürlich auch gerne hier bedienen. :wink:

EDIT: Um dir einen ersten Überblick über die Navigation zu verschaffen, kannst du auch mal Super+s drücken. Falls das nicht die richtige Tastenkombination ist (ich habe das bei mir geändert und weiss die ursprgl. nicht mehr hundertprozentig), such in der rc.lua nach folgendem String: hotkeys_popup.show_help

TuxPeter
Beiträge: 1966
Registriert: 19.11.2008 20:39:02
Lizenz eigener Beiträge: MIT Lizenz

Re: Adventskalender 14. Dezember 2023 - Teile und Herrsche

Beitrag von TuxPeter » 14.12.2023 16:43:39

Eine feine Sache, die Du da vorstellst.
Es will mir scheinen, dass ich so etwas auch gut für die Erstellung meines Türchens hätte brauchen können. (Wenn auch in meinem Fall solche Anwendungen eher selten sind. Dennoch sehr interessant!)

Benutzeravatar
mn77de
Beiträge: 155
Registriert: 23.11.2003 16:53:53
Wohnort: Übersee
Kontaktdaten:

Re: Adventskalender 14. Dezember 2023 - Teile und Herrsche

Beitrag von mn77de » 14.12.2023 17:08:12

Ich finde auch die Tools interessant, die nur nebensächlich erwähnt wurden. 8)
Von "lf" bin ich z.B. echt begeistert! Und "rofi" scheint ja wirklich genial zu sein.
Man lernt nicht aus. :D
OpenSource! :THX:

dasebastian
Beiträge: 1886
Registriert: 12.07.2020 11:21:17

Re: Adventskalender 14. Dezember 2023 - Teile und Herrsche

Beitrag von dasebastian » 14.12.2023 18:01:42

Ja gern!
mn77de hat geschrieben: ↑ zum Beitrag ↑
14.12.2023 17:08:12
Von "lf" bin ich z.B. echt begeistert! Und "rofi" scheint ja wirklich genial zu sein.
Damit hast du auch meine beiden Lieblingsanwendungen erkannt! Falls du noch nicht drübergestolpert bist:
Rofi und Wiki-Artikel zum Thema LF_Dateimanager

Das sind zwei so Programme (so wie auch Awesome), da kannst du ein bisschen basteln und hinterher hast du das Gefühl, dass du da jetzt wirklich dein eigenes Ding hast. So ein bisschen "suckless" aber easy. :lol:

uname
Beiträge: 12075
Registriert: 03.06.2008 09:33:02

Re: Adventskalender 14. Dezember 2023 - Teile und Herrsche

Beitrag von uname » 15.12.2023 08:08:07

Danke für deine beiden Beiträge zu Debianawesome. Auch ich habe mich in den letzten Jahren schon mit unterschiedlichen Tiling WMs beschäftigt. Hierzu gehörte natürlich auch Debianawesome. Leider bin ich damit aber nie wirklich glücklich geworden. Trotzdem ist das ein interessantes Bedienkonzept.

ich hätte noch zwei Fragen:

1.) Terminals oder Debiantmux-Terminal-Multiplexer?
Verwendest du bei mehreren Terminals die Tiling-Funktionen von Debianawesome oder macht es Sinn zusätzlich auf die Terminal-Teilungen (vertikal, horizontal) von Debiantmux zu setzen?

2.) Tiling WMs mit Unterstützung von Wayland?
Gibt es Tiling WMs, die auch Wayland unterstützen? Wirklich beschäftigt habe ich mich mit Wayland noch nicht. Aber vielleicht mit Blick auf die Zukunft interessant.

dasebastian
Beiträge: 1886
Registriert: 12.07.2020 11:21:17

Re: Adventskalender 14. Dezember 2023 - Teile und Herrsche

Beitrag von dasebastian » 15.12.2023 08:20:19

uname hat geschrieben: ↑ zum Beitrag ↑
15.12.2023 08:08:07
Verwendest du bei mehreren Terminals die Tiling-Funktionen von Debianawesome oder macht es Sinn zusätzlich auf die Terminal-Teilungen (vertikal, horizontal) von Debiantmux zu setzen?
Ich verwende tmux nicht, für meine Bedürfnisse als Büroendverbraucher reicht mir das Master-Stack, das mir Awesome bietet. Ich könnte mir aber vorstellen, dass ein zusätzliches tmux durchaus Sinn machen kann - tmux kann ja mehr, als nur Teilen, zB. im Scrollback-Buffer suchen etc. Ich brauche tmux also nicht, schaue es mir aber hin und wieder an.
Gibt es Tiling WMs, die auch Wayland unterstützen?
Ja, aber noch nicht so derartig viel. Debiansway ist wohl die gängigste Alternative, ist aber wohl out of the box kein dynamischer Tiler. Und das wäre eine gröbere Systemumstellung, da viele andere gängige X-Programme dann noch auf Debianxwayland angewiesen wären, das hat mich dann wieder "abgetörnt", da auf Wayland drauf quasi wieder eine X-Session draufzubauen. Fazit: ich (und nicht nur ich) warte ab, so lange es geht. :lol:

EDIT:
Dynamischer Tiler - du verwendest unterschiedliche Layouts, der Fenstermanager platziert selbstständig und macht den Rest.
Manual Tiler - du sagst dem Fenstermanager vorher, wohin das neue Fenster kommen soll.
Sway dürfte eine Art Hybrid sein.

Antworten