<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linux on Florian RICHER</title><link>https://mrdev023.fr/categories/linux/</link><description>Recent content in Linux on Florian RICHER</description><generator>Hugo -- gohugo.io</generator><language>fr</language><atom:link href="https://mrdev023.fr/categories/linux/index.xml" rel="self" type="application/rss+xml"/><item><title>My first participation in a KDE PIM Sprint</title><link>https://mrdev023.fr/p/kde-sprint-pim-2025/</link><pubDate>Mon, 15 Dec 2025 00:00:00 +0000</pubDate><guid>https://mrdev023.fr/p/kde-sprint-pim-2025/</guid><description>&lt;h1 id="my-first-participation-in-a-kde-sprint"&gt;My First Participation in a KDE Sprint
&lt;/h1&gt;&lt;p&gt;During Akademy 2025 in Berlin, I signed up for the KDE PIM Sprint. While I had never worked on PIM before, I had contributed to Plasma Mobile, Koko (for OCR implementation, still a work in progress), and Solid (for LED implementation). This was also my first time participating in a KDE Sprint.&lt;/p&gt;
&lt;p&gt;I arrived by train from Limoges to Paris at 10:30 PM on Friday. Unfortunately, I couldn&amp;rsquo;t arrive earlier due to professional commitments, and I had to leave again on Sunday at 5:30 PM.&lt;/p&gt;
&lt;h2 id="starting-the-sprint"&gt;Starting the Sprint
&lt;/h2&gt;&lt;p&gt;On Saturday morning, I joined everyone for breakfast. Afterward, we had meetings throughout the morning and part of the afternoon. In parallel, I compiled &lt;strong&gt;Merkuro&lt;/strong&gt; and &lt;strong&gt;KMail&lt;/strong&gt; on my laptop. Normally, I work on my desktop computer, so I needed to compile all the KDE packages on my laptop, which isn&amp;rsquo;t very powerful. Luckily, I had started the compilation process on the train.&lt;/p&gt;
&lt;p&gt;Once the meetings were over, I began working on PIM projects. My first task was to read the codebase to understand the various packages related to &lt;strong&gt;Merkuro&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="understanding-merkuro"&gt;Understanding Merkuro
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Merkuro&lt;/strong&gt; relies on components from &lt;strong&gt;Akonadi&lt;/strong&gt;, &lt;strong&gt;KMailTransport&lt;/strong&gt;, &lt;strong&gt;KDE PIM Runtime&lt;/strong&gt;, and &lt;strong&gt;KIdentityManagement&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;However, I encountered an issue with &lt;strong&gt;distrobox&lt;/strong&gt;: when Carl and I tried to configure an IMAP account in Merkuro Mail, the password was never saved. After some investigation, I discovered that this was related to &lt;strong&gt;KWallet&lt;/strong&gt; and &lt;strong&gt;KSecrets&lt;/strong&gt;. Since &lt;strong&gt;distrobox&lt;/strong&gt; doesn&amp;rsquo;t use the Plasma Desktop environment by default, many &amp;ldquo;basic&amp;rdquo; KDE services aren&amp;rsquo;t running in the background.&lt;/p&gt;
&lt;p&gt;To fix this, I had to run the following commands:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/kde/build/kwallet/prefix.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ksecretd &lt;span class="p"&gt;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kwalletd6 &lt;span class="p"&gt;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;wait&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;After that, I successfully configured my first IMAP account in &lt;strong&gt;KMail&lt;/strong&gt; and &lt;strong&gt;Merkuro&lt;/strong&gt;, and I was able to retrieve all my emails from Proton Mail.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The IMAP accounts in &lt;strong&gt;KMail&lt;/strong&gt; and &lt;strong&gt;Merkuro&lt;/strong&gt; are synchronized because both use &lt;strong&gt;KIdentityManagement&lt;/strong&gt; and &lt;strong&gt;KMailTransport&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="contributions"&gt;Contributions
&lt;/h2&gt;&lt;p&gt;I also opened a small merge request based on Carl&amp;rsquo;s recommendation regarding the unnecessary use of &lt;code&gt;Layout.fillWidth: true&lt;/code&gt; (&lt;a class="link" href="https://invent.kde.org/pim/merkuro/-/merge_requests/595" target="_blank" rel="noopener"
&gt;MR #595&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Next, I tried to add a new identity in &lt;strong&gt;Merkuro&lt;/strong&gt;, but it wasn&amp;rsquo;t saved. This time, the issue wasn&amp;rsquo;t related to &lt;strong&gt;KWallet&lt;/strong&gt;. Instead, it was because when the identity was passed as a property to the component, it was copied. So, when I modified the identity, it only modified the copy, not the &amp;ldquo;main&amp;rdquo; identity reference itself. This happened because &lt;strong&gt;Identity&lt;/strong&gt; is a &lt;strong&gt;QGadget&lt;/strong&gt; type, not a &lt;strong&gt;QObject&lt;/strong&gt; see the definition &lt;a class="link" href="https://invent.kde.org/pim/kidentitymanagement/-/blob/037e26915ea0deb0c61e17196d6f5147aa2e0cf7/src/core/identity.h#L78" target="_blank" rel="noopener"
&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To fix this, I changed the property type to the backend type. I could then access the current identity using &lt;code&gt;backend.identity&lt;/code&gt;. I updated all occurrences in the code and opened the following merge requests:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://invent.kde.org/pim/kidentitymanagement/-/merge_requests/38" target="_blank" rel="noopener"
&gt;MR #38&lt;/a&gt; to fix the Cryptography component.&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://invent.kde.org/pim/kidentitymanagement/-/merge_requests/40" target="_blank" rel="noopener"
&gt;MR #40&lt;/a&gt; to fix the remaining identity information.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Finally, I started investigating why I didn&amp;rsquo;t receive any errors when trying to add an IMAP account related to &lt;strong&gt;KSecrets&lt;/strong&gt;. It seems to be managed &lt;a class="link" href="https://invent.kde.org/pim/kmailtransport/-/blob/89b0b266c3b7275fb2f651401987fca9dfe90311/src/transport.cpp#L210" target="_blank" rel="noopener"
&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I left the Sprint having started work on the &lt;strong&gt;&amp;ldquo;Add an Identity&amp;rdquo; feature&lt;/strong&gt;, which you can follow &lt;a class="link" href="https://invent.kde.org/pim/kidentitymanagement/-/tree/work/florianricher/add-identity?ref_type=heads" target="_blank" rel="noopener"
&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;I really enjoyed participating in the KDE Sprint. It was wonderful to catch up with Carl again. I&amp;rsquo;m truly grateful for the time he took to help me get up to speed with the project.
The discussions with Laurent were also incredibly engaging, and even my brief conversation with Ingo was meaningful, though I still struggle a bit with spoken communication.&lt;/p&gt;
&lt;p&gt;Once I&amp;rsquo;m less busy personally, I plan to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Migrating the &lt;strong&gt;Waydroid implementation&lt;/strong&gt; to &lt;strong&gt;Plasma Workspace&lt;/strong&gt;, as discussed with Carl.&lt;/li&gt;
&lt;li&gt;Continuing my contributions to &lt;strong&gt;PIM&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Helping out with &lt;strong&gt;KAIChat&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Looking forward to the next opportunity to collaborate with the KDE community!&lt;/p&gt;
&lt;h2 id="useful-links"&gt;Useful links
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://planet.kde.org/volker-krause-2025-12-20-kde-pim-sprint-2025-in-paris/" target="_blank" rel="noopener"
&gt;Official KDE PIM Sprint 2025 Blog post&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Gitlab projects:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://invent.kde.org/pim/merkuro" target="_blank" rel="noopener"
&gt;Merkuro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://invent.kde.org/pim/kmailtransport" target="_blank" rel="noopener"
&gt;KMailTransport&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://invent.kde.org/pim/kidentitymanagement" target="_blank" rel="noopener"
&gt;KIdentityManagement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://invent.kde.org/pim/kdepim-runtime" target="_blank" rel="noopener"
&gt;KDE PIM Runtime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://invent.kde.org/pim/kmail" target="_blank" rel="noopener"
&gt;KMail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://invent.kde.org/utilities/kaichat" target="_blank" rel="noopener"
&gt;KAIChat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://invent.kde.org/frameworks/kwallet" target="_blank" rel="noopener"
&gt;KWallet &amp;amp; KSecret&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Configurer kde-builder sur des bases immuables et lancer un projet KDE</title><link>https://mrdev023.fr/p/kdedev_on_immuable/</link><pubDate>Sun, 06 Oct 2024 00:00:00 +0000</pubDate><guid>https://mrdev023.fr/p/kdedev_on_immuable/</guid><description>&lt;h2 id="introduction"&gt;Introduction
&lt;/h2&gt;&lt;p&gt;Les systèmes d&amp;rsquo;exploitation à base immuable, tels que NixOS ou Fedora Atomic, offrent de nombreux avantages en termes de stabilité et de sécurité. Cependant, ils présentent également des défis uniques pour les développeurs, notamment lorsqu&amp;rsquo;il s&amp;rsquo;agit de configurer des environnements de développement comme kde-builder. Dans ce post, nous explorerons comment surmonter ces obstacles en utilisant des outils comme distrobox ou toolbox, permettant ainsi aux développeurs de profiter des avantages des systèmes immuables tout en conservant la flexibilité nécessaire pour travailler efficacement avec kde-builder.&lt;/p&gt;
&lt;h2 id="préparer-son-environnement"&gt;Préparer son environnement
&lt;/h2&gt;&lt;h3 id="introduction-1"&gt;Introduction
&lt;/h3&gt;&lt;p&gt;La préparation de l&amp;rsquo;environnement de développement est essentielle pour utiliser kde-builder sur des systèmes immuables. Les outils et étapes varient selon la distribution : Fedora Atomic intègre toolbox, facilitant le processus, tandis que NixOS nécessite la configuration manuelle de distrobox.
Je vais donc dans un premier temps expliquer comment installer distrobox sur NixOS. Ensuite, je finirais par la configuration générale pour Fedora Atomic et aussi pour Nix OS.&lt;/p&gt;
&lt;h3 id="installation-de-distrobox-sur-nix-os"&gt;Installation de distrobox sur Nix OS
&lt;/h3&gt;&lt;p&gt;Pour installer distrobox, il suffit de rajouter dans sa configuration &lt;code&gt;configuration.nix&lt;/code&gt; ou dans son &lt;code&gt;flake&lt;/code&gt; la configuration suivante:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nix" data-lang="nix"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Active docker&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;virtualisation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;docker&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;enable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Rajoute l&amp;#39;utilisateur au group docker pour éviter d&amp;#39;utiliser la commande sudo tout le temps.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Par contre, ça rajoute un risque d&amp;#39;élévation de privilège sur le système&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Voir le warning ici https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="sr"&gt;&amp;lt;user&amp;gt;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;extraGroups&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;docker&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# On peut aussi l&amp;#39;ajouter en rootless&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;virtualisation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rootless&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;enable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# L&amp;#39;option setSocketVariable définit la variable DOCKER_HOST pour l&amp;#39;instance Docker rootless pour les utilisateurs normaux par défaut.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;setSocketVariable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Si vous souhaitez utiliser podman à la place&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;virtualisation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;containers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;enable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;virtualisation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;podman&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;enable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Ajoute l&amp;#39;alias `docker` pour une utilisation plus transparente avec les outils compatibles docker seulement&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;dockerCompat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Nécessaire pour que les conteneurs sous podman-compose puissent communiquer entre eux.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;defaultNetwork&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;settings&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dns_enabled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# On rajoute distrobox&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;environment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;systemPackages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;pkgs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="n"&gt;distrobox&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Une fois la configuration ajouté, il suffit de taper la commande:&lt;/p&gt;
&lt;p&gt;Sans flake&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nix" data-lang="nix"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;nixos-rebuild&lt;/span&gt; &lt;span class="n"&gt;switch&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Avec flake&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nix" data-lang="nix"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;nixos-rebuild&lt;/span&gt; &lt;span class="n"&gt;switch&lt;/span&gt; &lt;span class="err"&gt;--&lt;/span&gt;&lt;span class="n"&gt;flake&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="n"&gt;du&lt;/span&gt; &lt;span class="n"&gt;flake&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;#[nom de la configuraiton]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Normalement, vous devriez avoir la commande &lt;code&gt;distrobox&lt;/code&gt; de disponible. Si c&amp;rsquo;est le cas, vous pouvez allez à &lt;a class="link" href="#test-de-notre-environnement" &gt;cette étape&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="création-du-container-pour-travailler"&gt;Création du container pour travailler
&lt;/h2&gt;&lt;h3 id="nixos-distrobox"&gt;NixOS Distrobox
&lt;/h3&gt;&lt;p&gt;Pour créer le container avec distrobox, on peut passer par ce fichier &lt;code&gt;distrobox.ini&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;; Nom de notre environnement&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;[kdedev]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;quay.io/fedora/fedora:latest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;; Change le home directory si vous souhaitez isoler votre environnement de travail de votre home directory host&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;home&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;${HOME}/.distrobox_home/kdedev&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;; Uniquement si vous possedez une carte NVIDIA. Distrobox va intégrer des patchs pour mieux gérer les intégrations avec NVIDIA.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;nvidia&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;; Si vous souhaitez faire une image rootless&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;root&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;; Pull l&amp;#39;image durant la création de l&amp;#39;environnement&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;pull&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Ensuite, il suffit de taper la commande pour créer notre environnement nommé &lt;code&gt;kdedev&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;distrobox assemble create
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Une fois l&amp;rsquo;environnement créer, il reste une dernière étape à faire.
Je recommande de rajouter ceci dans votre &lt;code&gt;~/.bashrc&lt;/code&gt; ou dans le &lt;code&gt;bashrc&lt;/code&gt; situé dans le container configuré avec &lt;code&gt;home&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;alias&lt;/span&gt; &lt;span class="nv"&gt;new_shell&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;env -u PATH -u QML2_IMPORT_PATH -u QT_PLUGIN_PATH -u NIXPKGS_QT6_QML_IMPORT_PATH -u XDG_CONFIG_DIRS bash -l&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Vous pouvez l&amp;rsquo;éditer plus facilement en allant dans votre environnement de travail avec:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;distrobox enter kdedev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Cet alias peut-être utile pour retirer les variables d&amp;rsquo;environnements que rajoute NixOS. Sur Fedora Atomic, ça ne pose pas de problème, car ils respectent la FHS donc les librairies pointent au même endroit que dans le container. Sauf que Nix OS ne respecte pas la FHS (pour de bonnes raisons), donc on peut avoir des conflits lors de la compilation ou de l&amp;rsquo;exécution de programme que l&amp;rsquo;on aura compilé avec &lt;code&gt;kde-builder&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;La FHS est une structure de fichier normalisé dans le monde Linux &lt;a class="link" href="https://fr.wikipedia.org/wiki/Filesystem_Hierarchy_Standard" target="_blank" rel="noopener"
&gt;plus d&amp;rsquo;info ici&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pour l&amp;rsquo;utiliser, une fois dans votre environnement de travail, il suffit de faire:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;distrobox enter kdedev &lt;span class="c1"&gt;# Pour rentrer dans votre environnement de travail&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;new_shell
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="fedora-toolbox"&gt;Fedora Toolbox
&lt;/h3&gt;&lt;p&gt;Pour la configuration avec Fedora Toolbox, c&amp;rsquo;est assez simple, car Fedora intègre tout par défaut. Il suffit de taper la commande:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;toolbox create -r &lt;span class="o"&gt;[&lt;/span&gt;numéro de release fedora&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;nom de l&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;environnement&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Dans notre cas, ça sera:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;toolbox create -r &lt;span class="m"&gt;40&lt;/span&gt; kdedev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: À l&amp;rsquo;heure ou j&amp;rsquo;écris le post, j&amp;rsquo;ai encore des soucis pour lancer &lt;code&gt;kwin&lt;/code&gt; avec Fedora Toolbox. J&amp;rsquo;ai des problèmes de permission sur les DRM. Je pense que c&amp;rsquo;est lié à &lt;code&gt;selinux&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;obtiens l&amp;rsquo;erreur ci-dessous lors du lancement de &lt;code&gt;kwin_wayland&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;KMS: DRM_IOCTL_MODE_CREATE_DUMB failed: Permission denied
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;DRM : C&amp;rsquo;est Direct Rendering Manager et non Digital Rights Management &lt;a class="link" href="https://en.wikipedia.org/wiki/Direct_Rendering_Manager" target="_blank" rel="noopener"
&gt;pour plus d&amp;rsquo;infos&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="test-de-notre-environnement"&gt;Test de notre environnement
&lt;/h2&gt;&lt;p&gt;Avant de lancer notre test, il faut installer &lt;code&gt;kde-builder&lt;/code&gt;. Vous pouvez voir mon post précédent &lt;a class="link" href="https://mrdev023.fr/p/kde-first-contrib/#ma-configuration" &gt;ici&lt;/a&gt; ou vous pouvez suivre ce &lt;a class="link" href="https://kde-builder.kde.org/en/getting-started/before-building.html#install-kde-builder" target="_blank" rel="noopener"
&gt;lien&lt;/a&gt; qui est le même que dans le post.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rappel&lt;/strong&gt; Il faut l&amp;rsquo;installer dans votre environnement créé juste avant.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;distrobox enter kdedev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;NixOS Distrobox&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;toolbox enter kdedev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Fedora Toolbox&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Une fois votre environnement configurer, normalement vous pouvez tester de compiler &lt;code&gt;solid&lt;/code&gt; avec la commande :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kde-builder solid
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Puis de lancer solid avec la commande:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;source&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/kde/build/solid/prefix.sh&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; solid-hardware6 list
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Voilà 🙂 Normalement vous êtes prêt à travailler sur KDE avec un système immuable.&lt;/p&gt;
&lt;h2 id="note-pour-le-démarrage-de-kde-plasma-mobile"&gt;Note pour le démarrage de KDE Plasma Mobile
&lt;/h2&gt;&lt;p&gt;Pour plasma-mobile, il est nécessaire de configurer d&amp;rsquo;autres variables d&amp;rsquo;environnements. Voici le script que j&amp;rsquo;utilise :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;source&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/kde/build/plasma-mobile/prefix.sh&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;QT_QPA_PLATFORM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;offscreen plasma-mobile-envmanager --apply-settings
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Environment variables&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;QT_WAYLAND_DISABLE_WINDOWDECORATION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;QT_QUICK_CONTROLS_MOBILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;PLASMA_PLATFORM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;phone:handheld
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;QT_QUICK_CONTROLS_STYLE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;org.kde.breeze
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;QT_QPA_PLATFORM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wayland dbus-run-session kwin_wayland --xwayland &lt;span class="s2"&gt;&amp;#34;plasmashell -p org.kde.plasma.mobileshell&amp;#34;&lt;/span&gt; --width &lt;span class="m"&gt;360&lt;/span&gt; --height &lt;span class="m"&gt;720&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;a class="link" href="https://invent.kde.org/plasma/plasma-mobile/-/wikis/Building-and-Testing-Locally#running-the-shell-in-a-window" target="_blank" rel="noopener"
&gt;Source&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Vous pouvez aussi lancer le menu du haut sans lancer tout &lt;code&gt;kwin&lt;/code&gt; avec le script :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;source&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/kde/build/plasma-mobile/prefix.sh&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;QT_QPA_PLATFORM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;offscreen plasma-mobile-envmanager --apply-settings
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Environment variables&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;QT_WAYLAND_DISABLE_WINDOWDECORATION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;QT_QUICK_CONTROLS_MOBILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;PLASMA_PLATFORM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;phone:handheld
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;QT_QUICK_CONTROLS_STYLE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;org.kde.breeze
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qmlscene-qt6 &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/kde/src/plasma-mobile/tests/ActionDrawerTest.qml&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Compiler un paquet Postmarket OS</title><link>https://mrdev023.fr/p/pmbootstrap-own-paquet/</link><pubDate>Sun, 18 Feb 2024 00:00:00 +0000</pubDate><guid>https://mrdev023.fr/p/pmbootstrap-own-paquet/</guid><description>&lt;h2 id="à-propos-de-postmarket-os"&gt;À propos de Postmarket OS
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://postmarketos.org/" target="_blank" rel="noopener"
&gt;Postmarket OS&lt;/a&gt; est une distribution basée sur &lt;a class="link" href="https://www.alpinelinux.org/" target="_blank" rel="noopener"
&gt;Alpine&lt;/a&gt; conçut pour fonctionner sur téléphone, tablette
ou sur Raspberry PI.
La communauté autour du projet propose un ensemble d&amp;rsquo;outils comme &lt;code&gt;pmbootstrap&lt;/code&gt; qui permet de configurer et d&amp;rsquo;installer Postmarket OS sur son téléphone.
On peut aussi l&amp;rsquo;utiliser pour compiler son propre paquet et l&amp;rsquo;installer sur son téléphone facilement.&lt;/p&gt;
&lt;h2 id="configuration-de-notre-environnement-de-travail"&gt;Configuration de notre environnement de travail
&lt;/h2&gt;&lt;p&gt;Avant de pouvoir l&amp;rsquo;utiliser, il faut d&amp;rsquo;abord l&amp;rsquo;installer depuis ce &lt;a class="link" href="https://wiki.postmarketos.org/wiki/Pmbootstrap" target="_blank" rel="noopener"
&gt;lien&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Une fois installé et configuré, il faut d&amp;rsquo;abord préparer son environnement de travail.
Il est parfois nécessaire de mettre à jour le repository pmaports en local.
On peut le faire assez facilement avec la commande :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pmbootstrap pull
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;em&gt;Met à jour le repository &lt;a class="link" href="https://wiki.postmarketos.org/wiki/Pmaports.git" target="_blank" rel="noopener"
&gt;pmaports.git&lt;/a&gt; cloné en local.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Le repo pmaports.git stocke tous les paquets Alpine avec le fichier &lt;code&gt;APKBUILD&lt;/code&gt; utilisé par le serveur de compilation.&lt;/p&gt;
&lt;p&gt;Le fonctionnement est similaire à &lt;code&gt;PKGBUILD&lt;/code&gt; pour les utilisateurs de &lt;a class="link" href="https://archlinux.org/" target="_blank" rel="noopener"
&gt;Archlinux&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ce fichier contient toute la procédure pour préparer les sources, compiler le paquet depuis les sources, le numéro de version
ainsi que la procédure pour vérifier si le paquet fonctionne correctement.
Généralement on utilise les tests du projet comme les tests unitaires ou les tests fonctionnels.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;On peut également mettre à jour le cache de la commande &lt;code&gt;apk&lt;/code&gt; même si c&amp;rsquo;est pas forcément obligatoire.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pmbootstrap update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;em&gt;Met à jour le cache de la commande APK depuis l&amp;rsquo;environnement de travail&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;L&amp;rsquo;environnement de travail se situe par défaut dans le dossier &lt;code&gt;$HOME/.local/var/pmbootstrap/&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Si on a déjà un environnement de travail en cours et qu&amp;rsquo;il contient du cache ou un travail en cours, on peut le réinitialiser assez facilement avec la commande :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pmbootstrap zap
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;em&gt;Supprime le dossier de la commande chroot pour repartir de 0&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;La commande chroot permet de changer la racine Linux.
Par exemple, on peut faire &lt;code&gt;chroot $HOME/mon_dossier&lt;/code&gt; et à partir de ce moment-là, &lt;code&gt;/&lt;/code&gt; pointera vers &lt;code&gt;$HOME/mon_dossier&lt;/code&gt; dans notre shell actuel.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est très utilisé par pmbootstrap pour configurer le système Alpine.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pour ceux qui veulent utiliser une autre branche, on peut également changer la branche disponible sur le repository.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git -C &lt;span class="nv"&gt;$workdir&lt;/span&gt; checkout &lt;span class="o"&gt;[&lt;/span&gt;branch&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;$workdir&lt;/code&gt; par défaut se situe dans le dossier &lt;code&gt;$HOME/.local/var/pmbootstrap/cache_git/pmaports/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Exemple de branche utile : &lt;code&gt;kde-nightly&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="compilation-de-notre-paquet-alpine"&gt;Compilation de notre paquet Alpine
&lt;/h2&gt;&lt;p&gt;Maintenant, on va pouvoir compiler n&amp;rsquo;importe quel paquet avec la commande.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pmbootstrap build &lt;span class="o"&gt;[&lt;/span&gt;nom_du_paquet&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Par exemple, on peut compiler plasma-mobile (Attention le paquet est long à compiler)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pmbootstrap build plasma-mobile
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Par défaut, pmbootstrap va recompiler l&amp;rsquo;intégralité des dépendances du projet pour s&amp;rsquo;assurer que notre test sera reproductible.
Cependant, lorsque l&amp;rsquo;on souhaite juste tester un truc, ça peut-être ultra long.&lt;/p&gt;
&lt;p&gt;On peut donc utiliser deux options pour nous aider:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-i&lt;/code&gt; Permet de dire de compiler uniquement les dépendances du paquet défini dans le fichier &lt;code&gt;APKBUILD&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-n&lt;/code&gt; Permet d&amp;rsquo;éviter de compiler les dépendances du paquet défini dans le fichier &lt;code&gt;APKBUILD&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Avec le combot des deux options, ça nous évite de tout recompiler.&lt;/p&gt;
&lt;p&gt;On a aussi l&amp;rsquo;option &lt;code&gt;-mp&lt;/code&gt; qui peut-être pratique pour changer de mirroir si le téléchargement est lent ou si l&amp;rsquo;on souhaite télécharger des paquets nightly.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Un mirroir est un serveur utilisé pour télécharger les dépendances&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;On utilise cette option de cette manière:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pmbootstrap &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -mp https://nightly.postmarketos.org/plasma-mobile/packages/ &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -mp http://mirror.postmarketos.org/postmarketos/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;On a aussi d&amp;rsquo;autres options comme:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--details-to-stdout&lt;/code&gt; : Affiche le fichier de log dans la console&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-j N&lt;/code&gt; : Défini le nombre de core CPU utilisé pour la compilation&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-t [En seconde]&lt;/code&gt; : Le nombre de secondes sans nouveau log dans le fichier avant d&amp;rsquo;abandonner la compilation&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--src&lt;/code&gt; : Change les sources du paquet. Par défaut ce sont les sources définies dans le fichier &lt;code&gt;APKBUILD&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--arch [arch]&lt;/code&gt; : L&amp;rsquo;architecture CPU du téléphone&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un exemple concret d&amp;rsquo;une commande que j&amp;rsquo;ai utilisé pour recompiler ma version de plasma-mobile avec mes changements.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pmbootstrap &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -mp https://nightly.postmarketos.org/plasma-mobile/packages/ &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -mp http://mirror.postmarketos.org/postmarketos/ &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --details-to-stdout &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -j &lt;span class="m"&gt;32&lt;/span&gt; &lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="c1"&gt;# Pour utiliser toute la puissance de mon CPU&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -t &lt;span class="m"&gt;3600&lt;/span&gt; -v &lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="c1"&gt;# La compilation est ultra longue donc pmbootstrap abandonne la build avant la fin de la compilation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; build plasma-mobile &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --src &lt;span class="nv"&gt;$home&lt;/span&gt;/plasma-mobile/ &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --arch aarch64 &lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="c1"&gt;# Mon téléphone utilise l&amp;#39;architecture aarch64 (ARM64)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -i &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -n
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Attention&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Avant de compiler depuis le repository Nightly, il faut d&amp;rsquo;abord rajouter la clef de signature&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://nightly.postmarketos.org/plasma-mobile/pmos@local-662fcd2f.rsa.pub
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mv pmos@local-662fcd2f.rsa.pub &lt;span class="k"&gt;$(&lt;/span&gt;pmbootstrap config work&lt;span class="k"&gt;)&lt;/span&gt;/config_apk_keys/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Source : &lt;a class="link" href="https://wiki.postmarketos.org/wiki/Nightly" target="_blank" rel="noopener"
&gt;https://wiki.postmarketos.org/wiki/Nightly&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Si vous souhaitez avoir plus d&amp;rsquo;informations, il suffit de taper la commande&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pmbootstrap build --help
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Et pour avoir les arguments généraux&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pmbootstrap --help
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="envoie-du-paquet-compilé-sur-le-téléphone"&gt;Envoie du paquet compilé sur le téléphone
&lt;/h2&gt;&lt;p&gt;Une fois le paquet compilé, il suffit de demander à &lt;code&gt;pmbootstrap&lt;/code&gt; de l&amp;rsquo;envoyer sur notre téléphone via la connexion SSH.
Avec &lt;code&gt;pmbootstrap&lt;/code&gt;, on utilise la commande &lt;code&gt;sideload&lt;/code&gt; comme dans l&amp;rsquo;exemple ci-dessous.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pmbootstrap sideload plasma-mobile &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --host &lt;span class="o"&gt;[&lt;/span&gt;SSH HOST&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --port &lt;span class="o"&gt;[&lt;/span&gt;SSH PORT&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --user &lt;span class="o"&gt;[&lt;/span&gt;SSH USER&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --arch &lt;span class="o"&gt;[&lt;/span&gt;ARCH&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --install-key
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;On a les arguments suivants :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--host [SSH HOST]&lt;/code&gt; (Ex: 192.168.1.1)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--port [SSH PORT]&lt;/code&gt; (Ex: 22)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--user [SSH USER]&lt;/code&gt; (Ex: 192.168.1.1)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--arch [ARCH]&lt;/code&gt; : Permet de modifier la valeur définie pour le téléphone (Ex : aarch64)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--install-key&lt;/code&gt; : Permet d&amp;rsquo;installer la clef utilisée pour la vérification des paquets de la machine actuelle.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Tout gestionnaire de paquet comme APK, vérifie si le paquet est valide par rapport à la signature électronique du mainteneur du paquet.
Dans notre cas, la signature ne sera pas valide, car le paquet n&amp;rsquo;est pas compilé par le mainteneur original donc il suffit de rajouter notre signature.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pour revenir en arrière, il suffit de taper la commande ci-dessous depuis le téléphone ou depuis la connexion SSH&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apk upgrade -a
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;APK va réinstaller les paquets depuis les repos officiels.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;En cas de problème liée à des conflits de fichier, on peut utiliser cette commande&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apk fix --force
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;Cette commande va forcer APK à écraser les fichiers en conflit.&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Ma première contribution à KDE</title><link>https://mrdev023.fr/p/kde-first-contrib/</link><pubDate>Fri, 12 Jan 2024 00:00:00 +0000</pubDate><guid>https://mrdev023.fr/p/kde-first-contrib/</guid><description>&lt;h2 id="rapide-rappel-à-propos-de-kde"&gt;Rapide rappel à propos de KDE
&lt;/h2&gt;&lt;p&gt;KDE est un projet qui a pour but de développer des logiciels open-source. Le projet comporte plusieurs éléments les plus connus.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://develop.kde.org/products/frameworks/" target="_blank" rel="noopener"
&gt;KF5 ou KF6&lt;/a&gt; est un ensemble de librairies utilisées pour le développement de l&amp;rsquo;ensemble des logiciels de KDE. Il est basé sur la librairie &lt;a class="link" href="https://www.qt.io/" target="_blank" rel="noopener"
&gt;QT&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Exemple&lt;/em&gt; : Kirigami que l&amp;rsquo;on peut voir comme un &amp;ldquo;flutter&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;KF5 =&amp;gt; Basé sur QT5&lt;/p&gt;
&lt;p&gt;KF6 =&amp;gt; Basé sur QT6&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://kde.org/fr/plasma-desktop/" target="_blank" rel="noopener"
&gt;Plasma Shell&lt;/a&gt; est l&amp;rsquo;environnement de bureau développé pour Linux.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ma-configuration"&gt;Ma configuration
&lt;/h2&gt;&lt;p&gt;Pour développer sur KDE, KDE fournis un utilitaire assez puissant &lt;code&gt;kdesrc-build&lt;/code&gt;.
Il permet de configurer l&amp;rsquo;IDE, compiler, exécuter et gérer les dépendances avec l&amp;rsquo;aide d&amp;rsquo;une seule ligne de commande.&lt;/p&gt;
&lt;p&gt;Pour le configurer, il suffit de suivre la procédure sur ce &lt;a class="link" href="https://community.kde.org/Get_Involved/development/Set_up_a_development_environment" target="_blank" rel="noopener"
&gt;lien&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;: Aujourd&amp;rsquo;hui, il est recommandé d&amp;rsquo;utiliser &lt;code&gt;kde-builder&lt;/code&gt;. C&amp;rsquo;est le même outil sauf qu&amp;rsquo;il est écrit en python au lieu de perl. C&amp;rsquo;est plus simple pour les développeurs qui souhaitent contribuer au projet, car python est plus connu. La configuration reste exactement la même.&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://kde-builder.kde.org/en/getting-started/before-building.html#install-kde-builder" target="_blank" rel="noopener"
&gt;Pour plus d&amp;rsquo;info&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="mes-premières-difficultés"&gt;Mes premières difficultés
&lt;/h3&gt;&lt;p&gt;Il faut savoir que quand j&amp;rsquo;ai commencé à vouloir contribuer au projet KDE. Le projet était en train de migrer de QT5 à QT6.
Donc, les configurations nécessaires pour compiler correctement la version 6 était nettement plus compliqué que maintenant.
Il n&amp;rsquo;y avait aucune documentation pour migrer la configuration fournie de base, il fallait fouiller sur Github ou sur les blogs pour réussir
à avoir la configuration.
Aujourd&amp;rsquo;hui, il suffit juste de suivre le lien ci-dessus et on peut directement travailler sur KDE 6.&lt;/p&gt;
&lt;p&gt;Pour le développement sur KDE Plasma 6, j&amp;rsquo;ai dû faire quelques réajustements sur le fichier &lt;code&gt;~/.config/kdesrc-buildrc&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai changé la branche par défaut avec l&amp;rsquo;option &lt;code&gt;branch-group kf6-qt6&lt;/code&gt;.
Elle permet de cloner les repositories correctement et d&amp;rsquo;ajouter l&amp;rsquo;option cmake &lt;code&gt;-DBUILD_WITH_QT6=on&lt;/code&gt;.
J&amp;rsquo;ai aussi changé les fichiers de configuration utilisées pour obtenir le résultat ci-dessous.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;global
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; branch-group kf6-qt6
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [...]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;end global
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;include ~/kde/src/kdesrc-build/data/build-include/kf6-common-options.ksb
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;include ~/kde/src/kdesrc-build/data/build-include/kf6-frameworks.ksb
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;include ~/kde/src/kdesrc-build/data/build-include/kf6-workspace.ksb
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;include ~/kde/src/kdesrc-build/data/build-include/kf6-applications.ksb
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;include ~/kde/src/kdesrc-build/data/build-include/kf6-kdepim.ksb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="configurations-utiles"&gt;Configurations utiles
&lt;/h3&gt;&lt;h4 id="désactiver-larrêt-de-la-compilation-lors-dune-erreur-de-compilation"&gt;Désactiver l&amp;rsquo;arrêt de la compilation lors d&amp;rsquo;une erreur de compilation.
&lt;/h4&gt;&lt;p&gt;En général, &lt;code&gt;kdesrc-build&lt;/code&gt; s&amp;rsquo;adapte et retire tous les projets qui dépendent de la dépendance qui n&amp;rsquo;a pas réussi à compiler.
Le projet était encore en cours de développement donc les erreurs de compilations étaient très régulières.
J&amp;rsquo;ai tout simplement désactivé avec l&amp;rsquo;option &lt;code&gt;stop-on-failure false&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id="activer-le-support-des-lsp"&gt;Activer le support des LSP
&lt;/h4&gt;&lt;p&gt;C&amp;rsquo;est très pratique si on utilise VSCode ou même n&amp;rsquo;importe quel outil qui supporte les &lt;a class="link" href="https://microsoft.github.io/language-server-protocol/" target="_blank" rel="noopener"
&gt;LSP&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Il suffit d&amp;rsquo;activer les options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;compile-commands-linking&lt;/code&gt; =&amp;gt; &lt;code&gt;true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;compile-commands-export&lt;/code&gt; =&amp;gt; &lt;code&gt;true&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="générer-les-projets-vscode"&gt;Générer les projets VSCode
&lt;/h4&gt;&lt;p&gt;Il va générer automatiquement les workspaces VSCode avec les extensions recommander et le paramètrage par défaut.
Ça permet de travailler dans de très bonne condition avec VSCode.&lt;/p&gt;
&lt;p&gt;Il suffit de l&amp;rsquo;activer avec &lt;code&gt;generate-vscode-project-config true&lt;/code&gt;&lt;/p&gt;
&lt;h4 id="options-utiles-pour-la-commande-kdesrc-build"&gt;Options utiles pour la commande kdesrc-build
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-D&lt;/code&gt; : Pour ne pas inclure les dépendances dans la compilation&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Exemple: kdesrc-build -D kate&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-S&lt;/code&gt; : Pour ne pas mettre à jour les sources&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Exemple: kdesrc-build -S kate&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="ma-contribution"&gt;Ma contribution
&lt;/h2&gt;&lt;p&gt;J&amp;rsquo;ai contribué sur le support de la lampe torche pour l&amp;rsquo;environnement Plasma Mobile.
La lampe torche fonctionnait uniquement sur les &lt;a class="link" href="https://pine64.org/devices/pinephone/" target="_blank" rel="noopener"
&gt;pinephones&lt;/a&gt; en utilisant le fichier en dure &lt;code&gt;/sys/devices/platform/led-controller/leds/white:flash/brightness&lt;/code&gt;
(&lt;a class="link" href="https://invent.kde.org/plasma/plasma-mobile/-/blob/f970aa7acf2e9794ab4ed6b75e8f549bece83561/quicksettings/flashlight/flashlightutil.cpp#L17" target="_blank" rel="noopener"
&gt;Source&lt;/a&gt;).
J&amp;rsquo;ai réécris le module pour que ça fonctionne de manière générale sur tous les téléphones.&lt;/p&gt;
&lt;h3 id="rappel-sur-le-fonctionnement-du-noyau-linux-autour-des-leds"&gt;Rappel sur le fonctionnement du noyau Linux autour des leds
&lt;/h3&gt;&lt;p&gt;Pour comprendre comment la fonctionnalité, un petit rappel s&amp;rsquo;impose autour du fonctionnement des leds avec le noyau Linux.
Dès qu&amp;rsquo;une led est détecté par le noyau, il va mettre à disposition plusieurs fichiers.
On les trouvent dans le dossier correspondant au driver et aussi à l&amp;rsquo;emplacement physique sur la carte mère ou sur le SOC.
Mais on peut aussi les trouver plus facilement dans le répertoire &lt;code&gt;/sys/class/leds/&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;sys =&amp;gt; Fichiers système
class =&amp;gt; Trier par class.
leds =&amp;gt; La class &lt;code&gt;leds&lt;/code&gt;. On peut trouver aussi par appareil &lt;code&gt;bluetooth&lt;/code&gt;, puce &lt;code&gt;tpm&lt;/code&gt;, &amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;On disposent de plusieurs fichiers importants :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;brightness&lt;/code&gt; : Permet de changer ou de récupérer l&amp;rsquo;intensité de la led actuelle.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;max_brightness&lt;/code&gt; : Permet de connaitre l&amp;rsquo;intensité max de la led.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;color&lt;/code&gt; : Ce fichier n&amp;rsquo;existe pas tout le temps mais permet d&amp;rsquo;avoir la couleur de la led.&lt;/li&gt;
&lt;li&gt;Le reste des fichiers ne sont pas important pour nous.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="explication-du-fonctionnement-de-mon-code-petit-à-petit"&gt;Explication du fonctionnement de mon code petit à petit
&lt;/h3&gt;&lt;p&gt;Tout d&amp;rsquo;abord, il faut savoir que j&amp;rsquo;utilise la libraire Udev. Il est prévu que je migre vers la librairie &lt;a class="link" href="https://invent.kde.org/frameworks/solid" target="_blank" rel="noopener"
&gt;Solid&lt;/a&gt; une fois le support des leds ajoutées.
Udev pour faire simple, c&amp;rsquo;est une librairie qui permet d&amp;rsquo;interagir avec les appareils assez directement sans intermédiaire.
La librairie permet également de lister, filtrer, détecter si un appareil est connecté/déconnecté, &amp;hellip;.&lt;/p&gt;
&lt;p&gt;Pour commencer, je dois d&amp;rsquo;abord instancier Udev avec pour l&amp;rsquo;utiliser par la suite.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;udev&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;udev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;udev_new&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Ensuite, je liste tous les périphériques qui m&amp;rsquo;intéressent donc ceux appartenant à la class &lt;code&gt;leds&lt;/code&gt;.
Pour ça, il me suffit de créer un énumerateur sur lequel on appliquera tous les filtres.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;On peut voir une class comme une catégorie d&amp;rsquo;appareils.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;udev_enumerate&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;enumerate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;udev_enumerate_new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;udev&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;J&amp;rsquo;applique le filtre pour lister uniquement ceux qui appartiennent à la class &lt;code&gt;leds&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define TORCH_SUBSYSTEM &amp;#34;leds&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;udev_enumerate_add_match_subsystem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TORCH_SUBSYSTEM&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;J&amp;rsquo;applique le filtre pour lister uniquement ceux qui ont dans le nom &lt;code&gt;flash&lt;/code&gt; ou &lt;code&gt;torch&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;udev_enumerate_add_match_sysname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;*:torch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;udev_enumerate_add_match_sysname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;*:flash&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Puis je lance le scan avec mes filtres.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;udev_enumerate_scan_devices&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Au début, il faut savoir que je prenais le premier appareil avec le code ci-dessous mais certain téléphone ont une torche de couleur jaune et blanche.
Certain utilisateur malheureusement ne pouvait pas utiliser la fonctionnalité.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;udev_list_entry&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;devices&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;udev_enumerate_get_list_entry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;udev_list_entry&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;udev_list_entry_get_next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;devices&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;a class="link" href="https://invent.kde.org/plasma/plasma-mobile/-/blob/5c6a97caa52d549c0cb02b17fc65a3a7d729d237/quicksettings/flashlight/flashlightutil.cpp" target="_blank" rel="noopener"
&gt;Source&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Donc, j&amp;rsquo;ai changé le code avec le code ci-dessous qui permet d&amp;rsquo;itérer sur tous les appareils.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;udev_list_entry&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;devices&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;udev_enumerate_get_list_entry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;udev_list_entry&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;udev_device&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;device&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;udev_list_entry_foreach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;devices&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[...]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Pour chaque appareil, j&amp;rsquo;ai récuperé le répertoire ou se situe l&amp;rsquo;appareil avec le code ci-dessous
qui me renvoie par exemple: &lt;code&gt;/sys/devices/platform/led-controller/leds/white:flash&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;udev_list_entry_get_name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;J&amp;rsquo;instancie une instance udev_device pour interagir avec lui depuis le répertoire.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;udev_device&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;device&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;udev_device_new_from_syspath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;udev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Et à partir de là, il me suffit de lire les fichiers dont j&amp;rsquo;ai besoin.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;maxBrightness&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;udev_device_get_sysattr_value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;[NOM DU FICHIER]&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Je lis d&amp;rsquo;abord le fichier &amp;lsquo;color&amp;rsquo; et je regarde si la couleur est blanche sinon je continue.
Si je ne trouve pas de led de couleur blanche, je prends la dernière valeur récupérée.&lt;/p&gt;
&lt;p&gt;Une fois pour chaque appareil trouvé, il me reste plus qu&amp;rsquo;à récupérer les infos dont j&amp;rsquo;ai besoin.
Donc, la luminosité maximale &lt;code&gt;max_brightness&lt;/code&gt; et la luminosité actuelle &lt;code&gt;brightness&lt;/code&gt; pour correctement initialiser l&amp;rsquo;interface de Plasma Mobile.&lt;/p&gt;
&lt;p&gt;Quand je souhaite changer la valeur, je dois d&amp;rsquo;abord convertir la valeur entière en chaîne de charactère.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;const_cast&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m_torchEnabled&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;m_maxBrightness&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Ensuite, je change la luminosité&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;udev_device_set_sysattr_value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m_device&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;brightness&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nouvelle_valeur_en_char_&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si vous le souhaitez, vous pouvez retrouver le fichier dans son intégralité &lt;a class="link" href="https://invent.kde.org/plasma/plasma-mobile/-/blob/d162f96a63600d5b45bb8294afdb84efd85833f9/quicksettings/flashlight/flashlightutil.cpp" target="_blank" rel="noopener"
&gt;ici&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="info-utile-pour-débugger-kde-plama-mobile-depuis-postmarket-os"&gt;Info utile pour débugger KDE Plama Mobile depuis Postmarket OS
&lt;/h2&gt;&lt;p&gt;Le fichier de log se situe dans &lt;code&gt;~/.local/state/tinydm.log&lt;/code&gt;&lt;/p&gt;</description></item></channel></rss>