Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/12/2012, à 13:48

Shanx

[Awesome] Besoin d’aide pour le rc.lua

Bonjour,

J’utilise Awesome depuis bientôt trois ans. Je m’étais fait un rc.lua il y a très longtemps et c’est celui que j’utilise depuis (il m’a suivi malgré mes changements de pc et de distribution (je suis passé d’Ubuntu à Arch puis retour à Debian). C’est un patchwork de rc.lua chopés à droite et à gauche (avec une grosse part provenant de celui de Rolinh). Moi, dans tout ça, je ne maîtrise pas du tout le lua… Donc autant dire que c’est un joyeux bordel ! big_smile

Aujourd’hui, à la faveur d’un changement de lecteur de musique (je passe à cmus), je me suis replongé dedans pour réparer tout ce qui ne fonctionnait plus (et y’avait du boulot, vu que je procrastinais tous mes soucis…). Bref, j’ai réussi à mettre un widget et des contrôle clavier pour cmus, remettre les différents widgets (volume, mémoire), mais j’ai quelques soucis…

  Pour cmus en premier : tout fonctionne, jusqu’à ce que le lecteur tombe sur une musique dont les tags sont incomplets (et j’en ai un certain nombre). Voilà ce qui m’arrive dans ce cas :
1356695464.jpg
(le titre affiché dans le widget est celui de la musique précédente)
Comment faire que le widget m’affiche unknown artist ?

  Ensuite, le widget son ne fonctionne pas correctement : si je clique une première fois dessus (alors que le son est activé), il passe bien en Mute, mais si je reclique dessus, je suis toujours sur Mute dans alsamixer alors que le widget m’indique que le son est activé (je dois donc passer par alsamixer pour le remettre effectivement). Comment changer ça ?

  Les raccourcis claviers pour le son ne fonctionne pas non plus. Pour l’instant, j’ai laissé les anciennes touches multimédia (je n’en ai plus sur ce pc), mais quand je fais des tests avec des touches “lambda” (genre l’étoile), ça ne fonctionne pas (mais je ne peux plus utiliser l’étoile). À terme, je voudrais mettre la combinaison maj + fin pour mute, maj + “les flèches barrées qui permettent de scroller rapidement une page” pour gérer le volume : comment trouver les identifications desdites touches ?

Voilà mon rc.lua et l’article de Rolinh sur le widget pour cmus (ça peut servir).

EDIT : en fait, la touche étoile augmente bien le son, mais ça s’arrête à 63 (c’est pour ça que je n’avais pas vu avant)…

Dernière modification par Shanx (Le 28/12/2012, à 13:57)


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#2 Le 28/12/2012, à 14:04

Kanor

Re : [Awesome] Besoin d’aide pour le rc.lua

Shanx le premier probléme tu devrais pouvoir trouver tout seul
l'erreur

bad argument #1 to 'gsub' (string expected, got nil)

le code

string.gsub(string.match(cmus_info, "tag artist %C*"), "tag artist ","") or nil

la doc
http://lua-users.org/wiki/StringLibraryTutorial
il est probable qu'il n'aime pas le retour d'un nil (None) par string.match(cmus_info, "tag artist %C*")

pour l'autre probléme je pense que tu devrais peut être plus lancer la commande sur pulseuadio si tu l'utilise j'ai le  même prb.



comment trouver les identifications desdites touches ?

xev 

Hors ligne

#3 Le 28/12/2012, à 14:50

Shanx

Re : [Awesome] Besoin d’aide pour le rc.lua

Bon, mes problèmes sont tous réglés. smile

Pour cmus, la solution est de rajouter un or "" au milieu des lignes qui posaient problèmes :

          cmus_artist = string.gsub(string.match(cmus_info, "tag artist %C*") or "", "tag artist ","")
          cmus_title = string.gsub(string.match(cmus_info, "tag title %C*") or "", "tag title ","")
          cmus_curtime = string.gsub(string.match(cmus_info, "position %d*") or "", "position ","")

Pour le son, j’ai remplacé Master par PCM (même si PCM n’apparait pas dans alsamixer), puis dans alsamixer j’ai mis master à 100 quand le widget m’affichait 100. Comme ça, quand je change le son grâce au clavier, c’est à peu près proportionnel (à défaut de faire plus propre…).

Merci à kanor. smile

Dernière modification par Shanx (Le 28/12/2012, à 14:50)


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#4 Le 28/12/2012, à 15:23

Shanx

Re : [Awesome] Besoin d’aide pour le rc.lua

En fait, c’est pas tout à fait résolu. Il me reste le problème du passage à Mute.

Quand je vais dans Alsamixer, j’ai “Carte: PulseAudio”, donc je dois probablement passer par pulseaudio pour régler ça… Quelqu’un sait comment faire ?
Bon, ce qui m’étonne, c’est que Mute marche dans un sens, mais pas dans l’autre… Y’a p’têtre plus simple que de passer pas pulseaudio…


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#5 Le 26/01/2013, à 13:36

Rolinh

Re : [Awesome] Besoin d’aide pour le rc.lua

Salut,

désolé de ne pas avoir répondu plus tôt. sad
Pour le widget cmus, je l'avais retouché depuis l'article de blog, de mémoire. Voici la dernière version que j'en ai (je n'utilise plus cmus mais mpd avec ncmpcpp maintenant en fait). Mais bon, tu avais trouvé par toi-même comment corriger le problème. wink

-- Get cmus PID to check if it is running
function getCmusPid()
	local fpid = io.popen("pgrep cmus")
	local pid = fpid:read("*n")
	fpid:close()

	return pid
end

-- Enable cmus control
function cmus_control (action)
	local cmus_info, cmus_state
	local cmus_run = getCmusPid()

	if cmus_run then
		cmus_info = io.popen("cmus-remote -Q"):read("*all")
	    cmus_state = string.gsub(string.match(cmus_info, "status %a*"),"status ","")

		if cmus_state ~= "stopped" then
			if action == "next" then
				io.popen("cmus-remote -n")
			elseif action == "previous" then
				io.popen("cmus-remote -r")
			elseif action == "stop" then
				io.popen("cmus-remote -s")
			end
		end
		if action == "play_pause" then
			if cmus_state == "playing" or cmus_state == "paused" then
				io.popen("cmus-remote -u")
			elseif cmus_state == "stopped" then
				io.popen("cmus-remote -p")
			end
		end
	end
end

function hook_cmus()
	local cmus_string, cmus_info, cmus_state, cmus_artist, cmus_title, cmus_curtime, cmus_curtime_formated
	local cmus_totaltime, cmus_totaltime_formated, cmus_string
	-- check if cmus is running
	local cmus_run = getCmusPid()

	if cmus_run then
		cmus_string = '<span color="green">--</span> not playing <span color="green">--</span>'
		cmus_info = io.popen("cmus-remote -Q"):read("*all")
		if cmus_info ~= nil then
			cmus_state = string.gsub(string.match(cmus_info, "status %a*") or "","status ","")
			if cmus_state == "playing" or cmus_state == "paused" then
				cmus_artist = string.gsub(string.match(cmus_info, "tag artist %C*") or "", "tag artist ","") or "unknown artist"
				cmus_title = string.gsub(string.match(cmus_info, "tag title %C*") or "", "tag title ","") or "unknown title"
				cmus_curtime = string.gsub(string.match(cmus_info, "position %d*") or "", "position ","")
				cmus_curtime_formated = math.floor(cmus_curtime/60) .. ':' .. string.format("%02d",cmus_curtime % 60)
				cmus_totaltime = string.gsub(string.match(cmus_info, "duration %d*") or "", "duration ","")
				cmus_totaltime_formated = math.floor(cmus_totaltime/60) .. ':' .. string.format("%02d",cmus_totaltime % 60)
				cmus_string = awful.util.escape(cmus_artist .. " - " .. cmus_title .. "(" .. cmus_curtime_formated .. "/" .. cmus_totaltime_formated .. ")")
				if cmus_state == "paused" then
					cmus_string = '<span color="orange">||</span> ' .. cmus_string .. ''
				else
					cmus_string = '<span color="green">\></span> ' .. cmus_string .. ''
				end
			end
		end
		return cmus_string
	else
		return '<span color="red">--</span> not running <span color="red">--</span>'
	end
end

-- Cmus Widget
tb_cmus = widget({ type = "textbox", align = "right" })
tb_cmus:buttons(awful.util.table.join(
	awful.button({ }, 1, function () cmus_control("play_pause") end),
	awful.button({ }, 3, function () cmus_control("next") end)))

-- refresh Cmus widget
cmus_timer = timer({timeout = 1})
cmus_timer:add_signal("timeout", function() tb_cmus.text = '| ' .. hook_cmus() .. ' ' end)
cmus_timer:start()

Si jamais tu cherches à identifier des touches, tu peux utiliser xev. Exemple pour ne garder que les informations pertinents (tiré du wiki archlinux):

xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'

Enfin, pour le son, il faudrait identifier la carte. Tu peux peut-être remplacer l'option "-c" de amixer avec l'option "-D" et voir si ça aide.
Sinon, étant donné que le passage à Awesome 3.5 a cassé toute l'API pour les widgets et que je n'ai pas envie de réécrire mes widgets pour le moment (surtout car il leur manque une couche d'abstraction matérielle), j'ai pu recréé le comportement du widget du son via Vicious:

local vicious = require("vicious")
(...)
-- {{ Volume widget
local volwidget = wibox.widget.textbox()
volwidget:buttons(awful.util.table.join(
	awful.button({ }, 4, function () volumectl("up") end),
	awful.button({ }, 5, function () volumectl("down") end),
	awful.button({ }, 1, function () volumectl("mute") end)
 ))
vicious.register(volwidget, vicious.widgets.volume, 
    function(widget, args)
        local ret =  'Vol: <span color='
        if args[1] == 0 or args[2] == "♩" then
            ret = ret .. color.red
        else
            ret = ret .. color.green
        end
        return ret .. '>'.. args[1] .. '</span>% | '
    end, 1, "Master")
-- }}
(...)
for s = 1, screen.count() do
    (...)
    right_layout:add(volwidget)
    (...)
    mywibox[s]:set_widget(layout)
end

Bon, c'est pour Awesome 3.5. Ceci dit, si tu veux y faire fonctionner sur < 3.5, les changements à apporter sont mineurs.
J'espère que ça t'aide un peu.

Hors ligne