You are not logged in.

#1 2022-05-28 07:10:14

zeroxoneafour
Member
Registered: 2021-03-20
Posts: 25

Xfce4-panel and Xfdesktop slow to start with Awesome

I am using Xfce with startxfce4 from LightDM, but with awesome replacing xfwm4. When I used xfwm4, Xfce instantly started. However, when I use awesome, it takes up to 15 and 25 seconds for Xfce4-panel and Xfdesktop to display, respectively. A very strange occurrence is that, when most applications are started, both Xfce4-panel and Xfdesktop instantly start as well. For example, when a terminal is started, Xfce4-panel and Xfdesktop instantly start no matter how long I have been waiting since login. However, when the xfce4-appfinder is started, neither of them start. I would like to know if there is a way to use awesome with Xfce in which the panel and desktop immediately start on login.

/etc/xdg/xfce4/xfce-perchannel-xml/xfce4-session.conf

<?xml version="1.0" encoding="UTF-8"?>

<channel name="xfce4-session" version="1.0">
  <property name="general" type="empty">
    <property name="FailsafeSessionName" type="string" value="Failsafe"/>
    <property name="LockCommand" type="string" value=""/>
  </property>
  <property name="sessions" type="empty">
    <property name="Failsafe" type="empty">
      <property name="IsFailsafe" type="bool" value="true"/>
      <property name="Count" type="int" value="5"/>
      <property name="Client0_Command" type="array">
        <value type="string" value="awesome"/>
      </property>
      <property name="Client0_Priority" type="int" value="15"/>
      <property name="Client0_PerScreen" type="bool" value="false"/>
      <property name="Client1_Command" type="array">
        <value type="string" value="xfsettingsd"/>
	<value type="string" value="--disable-wm-check"/>
      </property>
      <property name="Client1_Priority" type="int" value="20"/>
      <property name="Client1_PerScreen" type="bool" value="false"/>
      <property name="Client2_Command" type="array">
        <value type="string" value="xfce4-panel"/>
	<value type="string" value="--disable-wm-check"/>
      </property>
      <property name="Client2_Priority" type="int" value="25"/>
      <property name="Client2_PerScreen" type="bool" value="false"/>
      <property name="Client3_Command" type="array">
        <value type="string" value="Thunar"/>
        <value type="string" value="--daemon"/>
      </property>
      <property name="Client3_Priority" type="int" value="30"/>
      <property name="Client3_PerScreen" type="bool" value="false"/>
      <property name="Client4_Command" type="array">
        <value type="string" value="xfdesktop"/>
	<value type="string" value="--disable-wm-check"/>
      </property>
      <property name="Client4_Priority" type="int" value="35"/>
      <property name="Client4_PerScreen" type="bool" value="false"/>
    </property>
  </property>

~/.config/awesome/rc.lua

pcall(require, "luarocks.loader")
local awful = require("awful")
local gears = require("gears")
local beautiful = require("beautiful")
beautiful.init(gears.filesystem.get_configuration_dir() .. "theme/theme.lua")

require("awful.autofocus")

-- Configurable stuff
modkey = "Mod1" -- 'Round these parts, we use left alt
terminal = "xfce4-terminal"
launcher = "xfce4-appfinder --disable-server"
screenshot = "xfce4-screenshooter -r"
background_dir = "$HOME/Pictures/backgrounds"
configdir = gears.filesystem.get_configuration_dir()

-- Autostarts
--awful.spawn("picom") -- Compositor
--awful.spawn("mpris-proxy") -- Proxy for headphone media control
--awful.spawn("/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1") -- GTK policykit
--awful.spawn.with_shell(configdir .. "reverse_scroll.sh") -- I like MacOS scroll, ok?
--awful.spawn.with_shell(configdir .. "vulkan.sh") -- Vulkan ICD file patching

-- Keybinds
globalkeys = gears.table.join(
	-- Main keys
	awful.key({modkey, "Shift"}, "e", function() awful.spawn("xfce4-session-logout") end,
		{description = "Quit XFCE (and by extension awesome)", group = "awesome"}),
	awful.key({modkey}, "Return", function() awful.spawn(terminal) end,
		{description = "Open a terminal", group = "launcher"}),
	awful.key({modkey}, "d", function() awful.spawn(launcher) end,
		{description = "Open a launcher", group = "launcher"}),
	awful.key({modkey, "Shift"}, "r", awesome.restart,
		{description = "Reload awesome", group = "awesome"}),
	awful.key({}, "Print", function() awful.spawn(screenshot) end,
		{description = "Take a screenshot", group = "launcher"}),
	
	-- Media keys
	awful.key({}, "XF86AudioRaiseVolume", function() awful.spawn("pactl set-sink-volume @DEFAULT_SINK@ +5%") end,
		{description = "Raise the volume", group = "media"}),
	awful.key({}, "XF86AudioLowerVolume", function() awful.spawn("pactl set-sink-volume @DEFAULT_SINK@ -5%") end,
		{description = "Lower the volume", group = "media"}),
	awful.key({}, "XF86AudioMute", function() awful.spawn("pactl set-sink-mute @DEFAULT_SINK@ toggle") end,
		{description = "Mute/unmute the speaker", group = "media"}),
	awful.key({}, "XF86AudioPlay", function() awful.spawn("playerctl play") end,
		{description = "Play audio", group = "media"}),
	awful.key({}, "XF86AudioPause", function() awful.spawn("playerctl pause") end,
		{description = "Pause audio", group = "media"})
)

clientkeys = gears.table.join(
	awful.key({modkey, "Shift"}, "q", function(c) c:kill() end,
		{description = "Close a window", group = "client"}),
	awful.key({modkey, "Shift"}, "space", awful.client.floating.toggle,
		{description = "Toggle floating", group = "client"}),
	awful.key({modkey}, "f", function(c)
			c.fullscreen = not c.fullscreen
			c.raise()
		end,
		{description = "Toggle fullscreen", group = "client"})
)

-- Stuff about tags
function get_tag(screen, tagnum)
	local tag = screen.tags[tagnum]
	if not tag then
		local tag_amount = #screen.tags
		while tag_amount < tagnum do
			tag = awful.tag.add(tagname, {screen = screen, index = tag_amount, layout = awful.layout.layouts[1]})
			tag_amount = tag_amount + 1
		end
	end
	return tag
end

--[[
function clean_tags(screen)
	local to_delete = {}
	for _, t in pairs(screen.tags) do
		if not t.selected and #t:clients() == 0 then
			to_delete[t] = true
		end
	end

	for t in pairs(to_delete) do
		t:delete()
	end
end
--]]

-- Tile by default, floating optional
awful.layout.layouts = {
	awful.layout.suit.tile,
	awful.layout.suit.floating
}

function make_base_tags(screen)
	awful.tag({"1", "2", "3", "4", "5", "6", "7", "8", "9"}, screen, awful.layout.layouts[1])
end
awful.screen.connect_for_each_screen(make_base_tags)
--clean_tags(awful.screen.focused())

for i = 1, 9 do
	globalkeys = gears.table.join(globalkeys,
		-- View
		awful.key({modkey}, "#" .. i + 9, -- No idea how this works, honestly don't want to know
			function ()
				local screen = awful.screen.focused()
				local tag = get_tag(screen, i)
				tag:view_only()
				--clean_tags(screen)
			end,
			{description = "View tag #"..i, group = "tag"}),
		-- Move to tag
		awful.key({modkey, "Shift"}, "#" .. i + 9,
			function ()
				if client.focus then
					local screen = client.focus.screen
					local tag = get_tag(screen, i)
					client.focus:move_to_tag(tag)
				end
				--clean_tags(screen)
			end,
		{description = "Move to tag #"..i, group = "tag"})
	)
end

-- Base awful.rules.rules
awful.rules.rules = {
	{
		rule = {},
		properties = {
			focus = awful.client.focus.filter,
			raise = true
		}
	},
	{
		rule = {},
		except_any = {name = {"Application Finder", "xfce4-panel"}, class = {"Xfdesktop"}},
		properties = {
			border_width = beautiful.border_width,
			border_color = beautiful.border_normal,
			keys = clientkeys
		}
	},
	{
		rule_any = {name = {"Application Finder"}}, -- Make sure we don't have a weird launcher
		properties = {
			focus = true,
			floating = true,
			ontop = true,
			raise = true,
			keys = nil
		}
	},
	{
		rule_any = {
			class = {"Xfdesktop"},
			name = {"xfce4-panel"}
		},
		properties = {
			sticky = true,
			keys = nil
		}
	},
}

root.keys(globalkeys)

-- Uncomment if not using xfce4-session
--awful.spawn("xfdesktop --sm-client-disable -D")
--awful.spawn("xfce4-panel --sm-client-disable -d")

-- External files that would make this file way too large
require("signals")

~/.config/awesome/signals.lua

-- Idk how signals work so here's some code I copied from the default rc.lua

local awful = require("awful")
local beautiful = require("beautiful")
local gears = require("gears")
local wibox = require("wibox")
beautiful.init(gears.filesystem.get_configuration_dir() .. "theme/theme.lua")

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

-- Update border color when focused
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)

Offline

Board footer

Powered by FluxBB