#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 !
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 :
(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.
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.
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.
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.
-- 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