Archive pour la catégorie ‘Linux’

XMonad

Dimanche 21 octobre 2007

Il y a quelques temps déjà, j’avais essayé de me mettre à Ion3, parce que je trouvais intéressante l’idée que le rôle d’un gestionnaire de fenêtre, c’est de “gestionner” les fenêtres. Et donc, charge à lui d’éviter que les fenêtres ne s’entassent en bordel sur l’écran.

Sauf que Ion, c’est bien gentil mais c’est scripté en Lua, et je trouve ca foncièrement imbitable. Alors, je me prennais à rêver d’un gestionnaire comme Ion, mais dans un langage un peu plus sympa … comme Haskell, par exemple !

Et ni une ni deux, je tombe sur xmonad, qui pourrait bien être le gestionnaire de fenêtres de mes rêves. Minimaliste, entièrement configurable, une des plus petites empreintes mémoire qui soit. Du bonheur.

Edit : après un peu de réflexion, voici la config à laquelle j’ai abouti. Elle se base sur Xmonad 0.4, avec l’extension CycleWS.

  • touche Mod : “windows”
  • circuler entre les fenêtres du bureau courant : haut / bas
  • déplacer une fenêtre dans la pile du bureau courant : shift + haut / bas
  • circuler entre les bureaux : gauche / droite
  • déplacer une fenêtre d’un bureau à un autre : shit + gauche / droite
  • femer la fenêtre courante : suppr
  • lancer dmenu : espace
  • lancer un terminal : entrée
  • quitter : echap
  • passer en disposition “full” : backspace
  • rattacher une fenêtre dans la mosaique : insert

J’oublie peut être un ou deux trucs, mais dans les grandes lignes c’est ca.

Musique et logiciels libres

Samedi 13 octobre 2007

La musique assistée par ordinateur sous Linux, c’est très différent que sous windows/mac. L’approche habituelle, c’est quelques gros programmes propriétaires de qualité pro qui font énormément de choses - et qui le font bien, difficile de dire le contraire.

Sous Linux, c’est une approche modulaire qui domine. Plutôt que d’avoir un gros programme, on en a pleins de petits qui ne font pas grand chose, mais qui ont la bonne idée de pouvoir travailler ensemble. L’outil qui permet cette collaboration, c’est le serveur son Jack. Alors forcément, quand on arrive sous Linux, on se demande comment on va pouvoir faire quoi que ce soit de correct avec tout ce bordel (question que je me pose régulièrement). Et parfois, désespéré, on tombe là dessus. Hitmuri, c’est un type qui fait du live electro improvisé en jouant sur des contrôleurs MIDI et en n’utilisant que des logiciels libres. Une petite démo vidéo pour voir ce que ca donne.

A la fin de la vidéo, il explique de quoi se compose son live. Dans les grandes lignes, il utilise plusieurs controleurs MIDI pour déclencher les sons d’un sampler, il fait transiter ca par jack-rack pour ajouter des effets pilotés par un autre contrôleur, et enfin il arrive dans freewheeling, un sampler temps réel pour enregistrer des boucles.  Le résultat est vraiment bluffant !

Client bittorrent pour Linux

Vendredi 17 août 2007

Ca fait un petit moment que j’essaye divers clients Bittorrent pour linux. Et jusqu’ici, je n’avais jamais été totalement satisfait :

  • les clients classiques en Python ont tendance à bouffer pas mal de ressources,
  • azureus est lui aussi bien trop lourd,
  • mldonkey gère mal le protocole et offre des débits foireux
  • l’interface rtorrent est totalement contre-intuitive

Finalement, hier, je suis tombé sur Deluge : un client en code natif, léger, peu de dépendances, les quelques options qui vont bien (gestion de plusieurs torrents, file de priorité, arrêt automatique en fonction du ratio …), une interface simple et claire … Pour l’instant la seule chose que je reproche à ce programme, c’est son temps d’arrêt (visiblement il termine tous les transferts en cours avant de couper).

Imprimer une brochure

Mercredi 30 mai 2007

Ma douce doit prochainement rendre un projet pour lequel elle a besoin d’imprimer des textes sous formes de brochures - des petits carnets format A5 constitués de pages A4 agraffées. Ca veut dire :

  • imprimer 4 pages par feuille : 2 au recto, 2 au verso
  • disposer les pages de manières à ce qu’en pliant et agraffant les feuilles au milieu, les pages soient dans l’ordre.

Sous linux, il y a pleins de petits outils bien pratiques. Pour faire tout ca, j’ai simplement eu besoin du package psutils, qui contiens tout ce qu’il faut. Voici comment, après quelques recherches, voici comment j’ai procédé.

Tout d’abord, les fichiers à imprimer doivent être au format postscript (.ps). Dans openoffice, il suffit de faire Imprimer, puis de sélectionner imprimer dans un fichier.

Le nombre total de pages (pages blanches comprises) doit être un multiple de 4. De plus, les pages doivent être dans un ordre bien précis. Par chance, il existe un petit programme qui permet de gérer tout ca : psbook.

psbook fichier.ps fichier.book.ps

fichier.book.ps contiens les pages mises dans le bon ordre, ainsi qu’autant de pages blanches que nécessaire (pour atteindre un multiple de 4).

Ensuite, on va disposer les pages deux par deux - et donc les passer au format A5 :

psnup -2 fichier.book.ps fichier.a5.ps

A partir de ce point, deux options s’offrent à vous :

vous n’avez pas accès à une imprimante recto-verso

il vous suffit alors :

  • d’imprimer les pages impaires de votre fichier
  • de les récupérer en sortie et les remettre en entrée à l’envers (attention, suivant la manière dont votre imprimante prend les feuilles, ca peut être à l’envers à l’endroit, ou à l’envers à l’envers - enfin je me comprends)
  • d’imprimer les paires du document

Et voila ! Il ne reste plus qu’à plier et relier avec quelques agraffes.

vous avez accès à une imprimante recto-verso

là il y a une étape intermédiaire de plus, mais c’est tellement plus gratifiant quand c’est terminé !

Il y a un petit problème que je vais essayer d’expliquer de manière imagée. Imaginez que votre main est une feuille. Posez là à plat. Au premier passage, l’imprimante écrit sur le dos de votre main. Mainteant, retournez votre main (dans l’axe du poignet, forcément) et l’imprimante écrit sur l’intérieur de votre main.

Si vous imprimez des pages A4 en disposition “portrait”, il n’y aura pas de problèmes. En revanche, si vous imprimez des pages en disposition “paysage”, votre verso sera dans le sens inverse. Donc, pour palier à ce problème, il faut inverser une page sur deux dans le fichier postscript. Attention, je vais faire un tour de magie.

pstops ‘2:0,1U(21cm,29.7cm)’ fichier.a5.ps fichier.final.ps

Grâce au programme pstops, on inverse une page sur deux. Grosso modo, ca veut dire :

  • “2:” = notre commande va traiter les pages modulo 2
  • “2:0″ = toutes les pages telles que page modulo 2 = 0
  • U(21cm,29.7cm) = retourner la page. On précise le format de la page car la rotation se fait autour du coin haut/gauche de la feuille. Du coup, il faut faire une translation à l’autre bout de la feuille.
  • “2:0,1 …” = pour les pages “modulo = 0″ on ne fait rien, pour les pages modulo = 1, on fait ce qui est marqué après. Ainsi, avec les virgules, on peut définir un comportement particulier pour chaque page

Et voila ! Avec ca, une page sur deux est inversée. Il ne reste donc plus qu’à imprimer.

Des bindings pour Ion

Jeudi 15 février 2007

En ce moment, je réfléchis à ma prochaine reprise de contrôle de mon système - malgré la tentative avortée de cette semaine. Et du coup je me dis que je réinstallerai bien Ion, le gestionnaire de fenêtre ultra-l33t.

Ion, pour ceux qui ne connaissent pas, fonctionne sur un principe simple : plutôt que de créer pleins de fenêtres en bordel et de les afficher à l’écran, on subdivise l’écran en cadres comme on l’entend, et on affiche les fenêtres d’applis dedans - sachant qu’un astucieux système d’onglets permet d’avoir plusieurs fenêtre dans un cadre. Les affichages en plein écran provoquent la création d’un bureau temporaire supplémentaire.

L’intérêt de ce gestionnaire, c’est qu’on peut en grande partie se passer de la souris, et configurer les raccourcis claviers comme on l’entend. La grande question est la suivante : comment configurer tout ca de manière logique ? Voici quelques propositions.

Toutes les commandes en rapport avec le gestionnaire de fenêtres devraient se baser sur la touche “windows” du clavier. Comme ca elle aura une utilité.

Déplacement du focus

Ces commandes n’altèrent pas la structure des cadres et fenêtres. On utilise le préfixe win.

  • Se déplacer entre les fenêtres d’un cadre : win + tab
  • Se déplacer entre les cadres d’un bureau : win + flèches
  • Se déplacer entre les bureaux : win + page up / page down

Altération de la structure

Ces commandes modifient le nombre de bureaux et la division en cadres. On utilise le préfixe win + alt

  • Subdivision verticale ou horizontale d’un cadre : win + alt + flèches
  • Création d’un nouveau bureau avant ou après le courant : win + alt + page up / page down
  • Suppression d’un cadre : win + alt + suppr (redistribue les fenêtres qu’il contenait)

Commandes de bases

Ion propose quelques commandes de bases à avoir toujours sous la main.

  • manpages : win + m
  • terminal : win + t
  • scratchpad : win + s
  • exécution (run) : win + r

Voila pour les commandes de base … Si vous avez des idées, si des choses vous paraissent illogiques / contre-intuitives, laissez un commentaire. Je reviendrai surement plus tard pour éditer ce post et - qui sait ? - mettre en lien un fichier de config contenant tous les bindings.

EDIT :

  • Pour récupérer le code d’une touche, il faut utiliser “xbindkeys -k”
  • Le code de la touche windows semble être Mod4
  • Inutile d’utiliser plusieurs bindings pour déplacer une fenêtre d’un cadre vers un autre. La technique par défaut est très bien : marquer la fenêtre à déplacer, déplacer le focus, coller la fenêtre dans le focus courant.

EDIT2 :

Comme annoncé, voici un premier petit bout de bindings. Cette première partie permet de définir les bindings de déplacement du focus : entre les bureaux (prior/next), entre les frames d’un bureau (flèches), entres les fenêtres d’une frame (tab/shift+tab).


-- Move focus within frame
defbindings("WFrame", {
kpress(META.."Tab", "_:switch_next()"),
kpress(META.."Shift+Tab", "_:switch_prev()")
})

-- Move focus within screen
defbindings("WScreen", {
kpress(META.."Up","ioncore.goto_next(_chld, 'up')","_chld:non-nil"),
kpress(META.."Down","ioncore.goto_next(_chld, 'down')","_chld:non-nil"),
kpress(META.."Left","ioncore.goto_next(_chld, 'left')","_chld:non-nil"),
kpress(META.."Right","ioncore.goto_next(_chld, 'right')","_chld:non-nil"),
})

-- Move focus between screens
defbindings("WScreen", {

bdoc("Switch to next/previous object within current screen."),
kpress(META.."Prior", "_:switch_prev()"),
kpress(META.."Next", "_:switch_next()"),

bdoc("Go to first object on activity/urgency list."),
kpress(META.."oe", "ioncore.goto_activity()")

})

-- Move focus to activity
defbindings("WScreen", {

kpress("K", "ioncore.goto_activity() or ioncore.goto_previous()"),

})

Récupérer une table de partitions

Mardi 13 février 2007

Grosse frayeur ce soir. Très grosse.

J’ai voulu me lancer dans une installation de Gentoo 2006.1 sur mon ordi, parce que je suis sorti de ma période Ubuntu - et que je veux à nouveau avoir un contrôle total sur mon système. Donc, j’entame la procédure d’installation, et là, au moment ou il faut tout installer, il me met une erreur, comme quoi il ne trouve plus mon disque /dev/hda

Je jette un oeil et effectivement, il y a /dev/hda, mais pas les 4 partitions qui le composent. Et fdisk /dev/hda me renvoie une erreur me disant qu’il ne peut pas ouvrir le disque.

Je fouille plus loin. Le BIOS détecte correctement mon disque. Je boote sur le LiveCD Ubuntu, même problème : impossible d’ouvrir le disque. Je monte le disque dans le PC de ma copine, même problème. Je commence à me dire qu’il y a un soucis physique.

Je le remonte à nouveau, et je tente un hdparm, histoire de voir si le système arrive à le détecter un tant soit peu. Et là oui, il le détecte. Mieux, même : après un petit tour dans hdparm, j’arrive à nouveau à accéder à mon dur dans fdisk !

Mais là, gros problème : pas de table de partition. Aie.

Plutot que de désespérer et tout formater, j’ai fouillé un peu le net, et je suis tombé sur un site (dont je ne truve plus l’adresse) qui m’a permis de comprendre comment on récupère une table de partitions. Sans plus attendre, voici la procédure :

  1. Don’t Panic (très important)
  2. Vous avez en tête le détail de la table de partitions d’origine. Dans ce cas, c’est facile, il suffit d’ouvrir fdisk et de reconstruire la table à l’identique - sans formater les partitions après, naturellement.
  3. Si vous n’avez pas ces infos, vous pouvez tenter de les deviner à l’aide de l’outil gpart (béni soit le créateur de ce programme). Ce dernier va tenter de deviner la table de partitions à partir de la structure des données sur le disque. Pour moi, ca a très bien marché.
  4. Quand il vous semble que gpart à trouvé quelque chose qui à l’air juste, il ne vous reste plus qu’à faire gpart /dev/xxx -W /dev/xxx pour écrire la table de partition dans le boot sector.
  5. Tentez de remonter vos partitions. Si ca marche, pleurez (de joie). Si ca marche pas, c’est la merde.

La petite astuce du jour :

La commande fdisk -l /dev/xxx vous permettra d’obtenir le détail de vos partitions. Le genre d’infos à stocker bien au chaud quelque part … Comme ici, par exemple :

Périphérique Amorce Début Fin Blocs Id Système
/dev/hda1 * 1 5 40131 83 Linux
/dev/hda2 6 128 987988 82 Linux swap / Solaris
La partition 2 ne se termine pas sur une frontière de cylindre.
/dev/hda3 129 1345 9775552 83 Linux
/dev/hda4 1346 14593 106414560 83 Linux

On notera que j’ai une partition qui ne se termine par à la frontière d’un cylindre - il parait que c’est mal, que fdisk ne préviens pas ces erreurs lors de la création des partitions, mais que gparted le gère.

Gentoo, la méta-distribution

Lundi 12 février 2007

Sur le site de Gentoo, on nous présente cette distribution comme étant une “meta-distrib”, car sa structure permet d’en faire à peu près ce qu’on veut. Et c’est vrai, avec son système de use flags, son init.d aux petits oignons, ses cflags, la possibilité de recompiler entièrement la distribution etc … on peut faire beaucoup de choses.

Et pourtant.

Quand je regarde les différentes distributions spécialisés qui fleurissent içi et là - en particulier dans le domaine audio/multimedia - je constate que presque toutes se basent sur Debian ou Ubuntu.

Alors pourquoi ? La gentoo aurait-elle raté sa vocation ? Et pourtant, le potentiel est là. Pour construire une distribution spécialisée basée sur Gentoo, il suffirait de pas grand chose.

Avec un Portage Overlay, on peut déjà commencer à customiser sa gentoo. c’est d’ailleurs quelque chose de très répandu à l’heure actuelle. Mais ce qu’on veut, c’est injecter un peu d’uniformisation dans la distribution ; perdre de la flexibilité au profit de la simplicité. Pour ca, il faudrait commencer par définir une liste exhaustive de tous les USE FLAGS qui entrent dans notre domaine de spécialisation. Déjà, ca simplifierai beaucoup de choses pour l’utilisateur final.

Et enfin, pour couronner le tout, Portage permet de compiler un programme et de générer un package binaire à partir de celui-ci. Si les USE FLAGS sont prédéfinis, on peut tout à fait mettre en place un mirroir contenant les packages précompilés. Certes, certains peuvent perdre l’optimisation des CFLAGS, mais c’est toujours réversible - rien n’empêche l’utilisateur malin de ne pas utiliser la version précompilée du programme.

Voila. J’ai l’impression qu’il ne manque vraiment pas grand chose pour pouvoir générer une distrib spécialisée basée sur gentoo. Et pourtant, ca ne cours pas les rues. Pourquoi ?

Un éditeur HEXA sous linux ?

Dimanche 21 janvier 2007

Ce weekend j’ai commencé à étudier la structure des fichiers .esx générés par mon sampler. Ces fichiers contiennent des samples audio et des patterns. C’est ma première tentative de reverse engineering, et je trouve ca plutot intéressant !

Cependant, je suis confronté à un manque certain d’outils adaptés sous linux. Il y a quelques programmes pratiques, tels que vbindiff ou encore khexedit. Mais c’est pas non plus la joie.

Je suis à la recherche d’un programme qui offre les fonctions suivantes :
* comparaison de deux fichiers binaires (comm vbindiff, qui le fait très bien)
* création de schémas de structures de données applicables sur le fichier.

C’est surtout cette deuxième fonction qui manque cruellement. Cela dit, si par hasard quelqu’un connait un programme capable de le faire (sous linux), ca m’intéresse !

Flashplayer 9 pour linux

Jeudi 18 janvier 2007

Ca y est, la version finale de Flash Player 9 pour linux est sortie hier. Je sais pas pourquoi, je dois avoir un don. Chaque fois que je vais sur penguin.swf, il y a une nouvelle version qui est sortie la veille ou le jour même. C’est fou, ca.

Ubuntu Edgy Eft et realtime-lsm

Samedi 6 janvier 2007

Je viens de passer une partie de ma soirée à essayer d’installer les paquets realtime-lsm et realtime-lsm-source sur ma Edgy. Il se trouve qu’il y a un bug, qui fait que ca ne compile pas.

Je rappelle que realtime-lsm permet de gérer des accès prioritaires pour certains groupes d’application. C’est particulièrement pratique lorsqu’il s’agit de faire de la musique en direct sur son ordi - ca évite d’avoir le programme qui coupe dès qu’il y a une petite surcharge.

Après moultes fouilles, j’ai fini par me rendre compte que realtime-lsm est déclaré “deprecated” - désormais il est remplacé dans toutes les distros récentes par PAM, qui gère l’accès aux ressources.

Du coup, pour avoir des applis son à accès prioritaire sous Edgy, il suffit d’ajouter les lignes suivantes :

@audio - rtprio 90
@audio - nice -5
@audio - memlock 500000

Dans le fichier /etc/security/limits.conf.

Un petit reboot (et encore je ne suis même pas sur qu’il soit nécessaire) et les applis du groupe audio ont un accès privilégié aux ressources !