<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Hállan Costa</title>
    <description>The latest articles on DEV Community by Hállan Costa (@hallancosta).</description>
    <link>https://dev.to/hallancosta</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3787877%2F21966c2d-af87-4d8e-9b64-44b3402d8bac.jpeg</url>
      <title>DEV Community: Hállan Costa</title>
      <link>https://dev.to/hallancosta</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hallancosta"/>
    <language>en</language>
    <item>
      <title>Guia Completo: Configurar Hibernação no Ubuntu 24.04 com Swap File</title>
      <dc:creator>Hállan Costa</dc:creator>
      <pubDate>Wed, 08 Jul 2026 20:10:21 +0000</pubDate>
      <link>https://dev.to/hallancosta/guia-completo-configurar-hibernacao-no-ubuntu-2404-com-swap-file-gib</link>
      <guid>https://dev.to/hallancosta/guia-completo-configurar-hibernacao-no-ubuntu-2404-com-swap-file-gib</guid>
      <description>&lt;h1&gt;
  
  
  Guia Completo: Configurar Hibernação no Ubuntu 24.04 com Swap File
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Versão:&lt;/strong&gt; Ubuntu 24.04 LTS (Noble Numbat)&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Kernel:&lt;/strong&gt; 6.17+&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Swap:&lt;/strong&gt; Arquivo &lt;code&gt;swap.img&lt;/code&gt; (não partição dedicada)&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Atualizado:&lt;/strong&gt; Julho 2026&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  ⚠️ O que torna este guia diferente
&lt;/h2&gt;

&lt;p&gt;O Ubuntu 24.04 mudou &lt;strong&gt;silenciosamente&lt;/strong&gt; o sistema de permissões do polkit. A maioria dos tutoriais na internet usa o formato &lt;code&gt;.pkla&lt;/code&gt; (antigo), que &lt;strong&gt;não funciona mais&lt;/strong&gt; no Ubuntu 24.04. Este guia cobre:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configuração com &lt;strong&gt;swap file&lt;/strong&gt; (não partição)&lt;/li&gt;
&lt;li&gt;O &lt;strong&gt;bug do initramfs&lt;/strong&gt; com swap files&lt;/li&gt;
&lt;li&gt;O &lt;strong&gt;novo formato de regras do polkit&lt;/strong&gt; (JavaScript &lt;code&gt;.rules&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Erro &lt;code&gt;sh: write error: invalid argument&lt;/code&gt;&lt;/strong&gt; — e como evitá-lo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Debug passo a passo&lt;/strong&gt; quando algo dá errado&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Pré-requisitos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Ubuntu 24.04 LTS instalado&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;bash&lt;/code&gt; como shell padrão&lt;/li&gt;
&lt;li&gt;Swap file já criado (ex: &lt;code&gt;/swap.img&lt;/code&gt; de 36GB) &lt;strong&gt;ou disposição para criar um&lt;/strong&gt; (veja a próxima seção)&lt;/li&gt;
&lt;li&gt;Swap ativo (&lt;code&gt;swapon --show&lt;/code&gt; mostra o arquivo)&lt;/li&gt;
&lt;li&gt;Swap &lt;strong&gt;&amp;gt;= RAM física&lt;/strong&gt; (recomendado para hibernação segura)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Verificar pré-requisitos
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Distro&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/os-release | &lt;span class="nb"&gt;grep &lt;/span&gt;PRETTY_NAME

&lt;span class="c"&gt;# Swap ativo&lt;/span&gt;
swapon &lt;span class="nt"&gt;--show&lt;/span&gt;

&lt;span class="c"&gt;# RAM total&lt;/span&gt;
free &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Criar ou recriar o swap file (&lt;code&gt;/swap.img&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;Se você ainda não tem um swap file ou precisa &lt;strong&gt;aumentar/redimensionar&lt;/strong&gt; a swap, siga este passo. Se já tiver &lt;code&gt;/swap.img&lt;/code&gt; ativo e do tamanho certo, pode pular.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Atenção:&lt;/strong&gt; Ao recriar o &lt;code&gt;swap.img&lt;/code&gt;, o &lt;strong&gt;offset físico muda&lt;/strong&gt;. Sempre que deletar e criar um novo swap file, você precisa refazer o &lt;strong&gt;Passo 1&lt;/strong&gt; (offset) e o &lt;strong&gt;Passo 2&lt;/strong&gt; (GRUB).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  1. Desativar e remover o swap antigo
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Desativa qualquer swap ativa&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;swapoff &lt;span class="nt"&gt;-a&lt;/span&gt;

&lt;span class="c"&gt;# Remove o arquivo antigo (se existir)&lt;/span&gt;
&lt;span class="nb"&gt;sudo rm&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /swap.img

&lt;span class="c"&gt;# Remove a entrada antiga do /etc/fstab (evita erros no boot)&lt;/span&gt;
&lt;span class="nb"&gt;sudo sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'/swap/d'&lt;/span&gt; /etc/fstab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Criar o novo arquivo de swap
&lt;/h3&gt;

&lt;p&gt;O tamanho deve ser &lt;strong&gt;pelo menos igual à RAM física&lt;/strong&gt;. No exemplo abaixo, criamos 36GB (ajuste conforme sua RAM):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Método recomendado: fallocate (mais rápido)&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;fallocate &lt;span class="nt"&gt;-l&lt;/span&gt; 36G /swap.img

&lt;span class="c"&gt;# Alternativa: dd (mais lento, mas compatível com qualquer filesystem)&lt;/span&gt;
&lt;span class="c"&gt;# sudo dd if=/dev/zero of=/swap.img bs=1M count=36864 status=progress&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Configurar permissões e formatar como swap
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Apenas o root pode acessar o swap&lt;/span&gt;
&lt;span class="nb"&gt;sudo chmod &lt;/span&gt;600 /swap.img

&lt;span class="c"&gt;# Formata como área de swap&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;mkswap /swap.img
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Ativar o swap
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;swapon /swap.img
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Configurar para ativar automaticamente no boot
&lt;/h3&gt;

&lt;p&gt;Adicione ao &lt;code&gt;/etc/fstab&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'/swap.img none swap sw 0 0'&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; /etc/fstab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ou edite manualmente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/fstab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Adicione a linha:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/swap.img none swap sw 0 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6. Verificar
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;swapon &lt;span class="nt"&gt;--show&lt;/span&gt;
free &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Esperado:&lt;/strong&gt; &lt;code&gt;/swap.img&lt;/code&gt; aparece em &lt;code&gt;swapon --show&lt;/code&gt; e o tamanho total de swap é &amp;gt;= RAM.&lt;/p&gt;




&lt;h2&gt;
  
  
  Passo 1: Coletar informações do sistema
&lt;/h2&gt;

&lt;p&gt;Você precisa de &lt;strong&gt;dois valores&lt;/strong&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  1.1 UUID da partição raiz (onde o swap.img está)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;findmnt &lt;span class="nt"&gt;-no&lt;/span&gt; UUID &lt;span class="nt"&gt;-T&lt;/span&gt; /swap.img
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Exemplo: &lt;code&gt;58bf371d-01d1-4316-98c3-ef845c1825f2&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  1.2 Offset físico do swap.img no disco
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;filefrag &lt;span class="nt"&gt;-v&lt;/span&gt; /swap.img | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'NR==4{gsub(/\./,"");print $4}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Exemplo: &lt;code&gt;14241792&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;⚠️ &lt;strong&gt;Importante:&lt;/strong&gt; Se o &lt;code&gt;filefrag&lt;/code&gt; retornar algo como &lt;code&gt;14241792..&lt;/code&gt;, &lt;strong&gt;remova os dois pontos&lt;/strong&gt; e use só o número.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Passo 2: Configurar o GRUB
&lt;/h2&gt;

&lt;p&gt;No Ubuntu, os parâmetros do kernel para hibernação vão no &lt;strong&gt;GRUB&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/default/grub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Localize a linha:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;GRUB_CMDLINE_LINUX_DEFAULT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"quiet splash"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Adicione&lt;/strong&gt; no final (mantenha o que já existe):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;GRUB_CMDLINE_LINUX_DEFAULT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"quiet splash resume=UUID=58bf371d-01d1-4316-98c3-ef845c1825f2 resume_offset=14241792"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Não apague&lt;/strong&gt; o &lt;code&gt;quiet splash&lt;/code&gt; ou outros parâmetros existentes!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Salve (&lt;code&gt;Ctrl+O&lt;/code&gt;, &lt;code&gt;Enter&lt;/code&gt;, &lt;code&gt;Ctrl+X&lt;/code&gt;) e atualize:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;update-grub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Passo 3: Configurar o initramfs (Atenção ao bug!)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ❌ O que NÃO fazer (erro comum)
&lt;/h3&gt;

&lt;p&gt;Não crie um arquivo &lt;code&gt;/etc/initramfs-tools/conf.d/resume&lt;/code&gt; com &lt;code&gt;resume_offset&lt;/code&gt;. Isso causa o warning:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;W: initramfs-tools configuration sets RESUME=UUID=...
W: but no matching swap device is available.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O initramfs procura uma &lt;strong&gt;partição de swap&lt;/strong&gt; com aquele UUID, mas você tem um &lt;strong&gt;arquivo de swap&lt;/strong&gt;. O warning é inofensivo, mas confuso.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ O que fazer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Simplesmente não crie o arquivo &lt;code&gt;resume&lt;/code&gt;&lt;/strong&gt;. Deixe o initramfs gerar sem ele — o kernel vai ler os parâmetros do GRUB diretamente.&lt;/p&gt;

&lt;p&gt;Se você já criou o arquivo, remova:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo rm&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /etc/initramfs-tools/conf.d/resume
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Regenere o initramfs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;update-initramfs &lt;span class="nt"&gt;-u&lt;/span&gt; &lt;span class="nt"&gt;-k&lt;/span&gt; all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Saída esperada (sem warnings):&lt;/p&gt;


&lt;pre class="highlight plaintext"&gt;&lt;code&gt;update-initramfs: Generating /boot/initrd.img-6.17.0-35-generic
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  ⚠️ Passo 3.5: NÃO crie scripts de resume no initramfs!
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🚨 O erro &lt;code&gt;sh: write error: invalid argument&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Alguns tutoriais antigos sugerem criar um script em &lt;code&gt;/etc/initramfs-tools/scripts/init-premount/resume_swapfile&lt;/code&gt; para setar o &lt;code&gt;resume&lt;/code&gt; e &lt;code&gt;resume_offset&lt;/code&gt; manualmente durante o boot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Isso é desnecessário e causa erro!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Quando o kernel já recebe &lt;code&gt;resume&lt;/code&gt; e &lt;code&gt;resume_offset&lt;/code&gt; via GRUB (Passo 2), ele configura automaticamente. Se um script tentar escrever de novo em &lt;code&gt;/sys/power/resume&lt;/code&gt; ou &lt;code&gt;/sys/power/resume_offset&lt;/code&gt;, o kernel retorna:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sh: write error: invalid argument
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ Verifique e remova scripts desnecessários
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Listar scripts no initramfs&lt;/span&gt;
&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-la&lt;/span&gt; /etc/initramfs-tools/scripts/init-premount/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se encontrar um arquivo como &lt;code&gt;resume_swapfile&lt;/code&gt;, &lt;strong&gt;remova&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo rm&lt;/span&gt; /etc/initramfs-tools/scripts/init-premount/resume_swapfile
&lt;span class="nb"&gt;sudo &lt;/span&gt;update-initramfs &lt;span class="nt"&gt;-u&lt;/span&gt; &lt;span class="nt"&gt;-k&lt;/span&gt; all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Regra de ouro:&lt;/strong&gt; O kernel lê &lt;code&gt;resume&lt;/code&gt; e &lt;code&gt;resume_offset&lt;/code&gt; do GRUB automaticamente. Não crie scripts para isso.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Passo 4: Configurar o Polkit (O truque do Ubuntu 24.04!)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🚨 A pegadinha
&lt;/h3&gt;

&lt;p&gt;O Ubuntu 24.04 usa &lt;strong&gt;polkit 122+&lt;/strong&gt;, que migrou do formato &lt;code&gt;.pkla&lt;/code&gt; (legacy) para &lt;strong&gt;regras JavaScript&lt;/strong&gt; (&lt;code&gt;.rules&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Tutoriais antigos usam:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Isso NÃO funciona mais no Ubuntu 24.04.&lt;/strong&gt; O arquivo é simplesmente ignorado.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Solução: Usar .rules (JavaScript)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /etc/polkit-1/rules.d
&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/polkit-1/rules.d/85-enable-hibernate.rules
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cole:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;polkit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addRule&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;org.freedesktop.login1.hibernate&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
        &lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;org.freedesktop.login1.hibernate-multiple-sessions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
        &lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;org.freedesktop.login1.handle-hibernate-key&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;polkit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;YES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Salve (&lt;code&gt;Ctrl+O&lt;/code&gt;, &lt;code&gt;Enter&lt;/code&gt;, &lt;code&gt;Ctrl+X&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Reiniciar o systemd-logind
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart systemd-logind
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Isso pode deslogar sua sessão gráfica.&lt;/strong&gt; Salve tudo antes.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Passo 5: Reboot e teste
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após reiniciar, verifique:&lt;/p&gt;

&lt;h3&gt;
  
  
  5.1 Verificar parâmetros do kernel
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /proc/cmdline | &lt;span class="nb"&gt;grep &lt;/span&gt;resume
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Deve mostrar: &lt;code&gt;resume=UUID=... resume_offset=...&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  5.2 Verificar se o hibernate está habilitado
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;busctl call org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager CanHibernate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Esperado: &lt;code&gt;s "yes"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Se retornar &lt;code&gt;s "no"&lt;/code&gt;, vá para a seção &lt;strong&gt;Debug&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  5.3 Testar o hibernate
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl hibernate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O sistema deve:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Salvar o estado da RAM no swap.img&lt;/li&gt;
&lt;li&gt;Desligar completamente&lt;/li&gt;
&lt;li&gt;Ao ligar, restaurar a sessão exatamente como estava&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Não deve aparecer&lt;/strong&gt; &lt;code&gt;sh: write error: invalid argument&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🔧 Debug: Quando o CanHibernate retorna "no"
&lt;/h2&gt;

&lt;p&gt;Se &lt;code&gt;busctl call ... CanHibernate&lt;/code&gt; retornar &lt;code&gt;s "no"&lt;/code&gt;, execute este checklist:&lt;/p&gt;

&lt;h3&gt;
  
  
  Check 1: Verificar parâmetros do kernel
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /proc/cmdline
&lt;span class="nb"&gt;cat&lt;/span&gt; /sys/power/resume
&lt;span class="nb"&gt;cat&lt;/span&gt; /sys/power/resume_offset
&lt;span class="nb"&gt;cat&lt;/span&gt; /sys/power/state
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Esperado:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/proc/cmdline&lt;/code&gt; mostra &lt;code&gt;resume=UUID=... resume_offset=...&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/sys/power/resume&lt;/code&gt; mostra &lt;code&gt;259:5&lt;/code&gt; (ou similar, major:minor do device)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/sys/power/resume_offset&lt;/code&gt; mostra seu offset&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/sys/power/state&lt;/code&gt; mostra &lt;code&gt;freeze mem disk&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Check 2: Verificar swap
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;swapon &lt;span class="nt"&gt;--show&lt;/span&gt;
free &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Esperado:&lt;/strong&gt; Swap ativo e tamanho &amp;gt;= RAM.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check 3: Verificar Secure Boot
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mokutil &lt;span class="nt"&gt;--sb-state&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Se estiver &lt;code&gt;enabled&lt;/code&gt;, o hibernate pode ser bloqueado. Desative no BIOS se necessário.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Check 4: Verificar autorização do polkit
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pkcheck &lt;span class="nt"&gt;--action-id&lt;/span&gt; org.freedesktop.login1.hibernate &lt;span class="nt"&gt;--process&lt;/span&gt; &lt;span class="nv"&gt;$$&lt;/span&gt; &lt;span class="nt"&gt;--allow-user-interaction&lt;/span&gt; 2&amp;gt;&amp;amp;1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Se retornar &lt;code&gt;Not authorized&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O arquivo &lt;code&gt;.pkla&lt;/code&gt; está sendo usado (formato antigo)&lt;/li&gt;
&lt;li&gt;Ou a regra &lt;code&gt;.rules&lt;/code&gt; está no lugar errado&lt;/li&gt;
&lt;li&gt;Ou o &lt;code&gt;systemd-logind&lt;/code&gt; não foi reiniciado&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Solução:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Remova qualquer &lt;code&gt;.pkla&lt;/code&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo rm&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /etc/polkit-1/localauthority/50-local.d/&lt;span class="k"&gt;*&lt;/span&gt;.pkla
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Crie o &lt;code&gt;.rules&lt;/code&gt; (Passo 4)&lt;/li&gt;
&lt;li&gt;Reinicie o &lt;code&gt;systemd-logind&lt;/code&gt; (Passo 4)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Check 5: Verificar logs do systemd-logind
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; systemd-logind &lt;span class="nt"&gt;-n&lt;/span&gt; 50
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Procure por mensagens de erro relacionadas a hibernate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check 6: Verificar se o initramfs tem warning
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;update-initramfs &lt;span class="nt"&gt;-u&lt;/span&gt; &lt;span class="nt"&gt;-k&lt;/span&gt; all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se aparecer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;W: initramfs-tools configuration sets RESUME=UUID=...
W: but no matching swap device is available.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Solução:&lt;/strong&gt; Remova &lt;code&gt;/etc/initramfs-tools/conf.d/resume&lt;/code&gt; e regenere.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check 7: Verificar scripts desnecessários no initramfs
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-la&lt;/span&gt; /etc/initramfs-tools/scripts/init-premount/
lsinitramfs /boot/initrd.img-&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;uname&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; resume
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se encontrar &lt;code&gt;resume_swapfile&lt;/code&gt; ou similar, remova (veja Passo 3.5).&lt;/p&gt;




&lt;h2&gt;
  
  
  📋 Comandos rápidos (cheat sheet)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Coletar info&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;findmnt &lt;span class="nt"&gt;-no&lt;/span&gt; UUID &lt;span class="nt"&gt;-T&lt;/span&gt; /swap.img
&lt;span class="nb"&gt;sudo &lt;/span&gt;filefrag &lt;span class="nt"&gt;-v&lt;/span&gt; /swap.img | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'NR==4{gsub(/\./,"");print $4}'&lt;/span&gt;

&lt;span class="c"&gt;# Criar ou recriar swap file&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;swapoff &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;span class="nb"&gt;sudo rm&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /swap.img
&lt;span class="nb"&gt;sudo sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'/swap/d'&lt;/span&gt; /etc/fstab
&lt;span class="nb"&gt;sudo &lt;/span&gt;fallocate &lt;span class="nt"&gt;-l&lt;/span&gt; 36G /swap.img
&lt;span class="nb"&gt;sudo chmod &lt;/span&gt;600 /swap.img
&lt;span class="nb"&gt;sudo &lt;/span&gt;mkswap /swap.img
&lt;span class="nb"&gt;sudo &lt;/span&gt;swapon /swap.img
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'/swap.img none swap sw 0 0'&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; /etc/fstab

&lt;span class="c"&gt;# Configurar GRUB&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/default/grub
&lt;span class="nb"&gt;sudo &lt;/span&gt;update-grub

&lt;span class="c"&gt;# Limpar initramfs (se necessário)&lt;/span&gt;
&lt;span class="nb"&gt;sudo rm&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /etc/initramfs-tools/conf.d/resume
&lt;span class="nb"&gt;sudo rm&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /etc/initramfs-tools/scripts/init-premount/resume_swapfile
&lt;span class="nb"&gt;sudo &lt;/span&gt;update-initramfs &lt;span class="nt"&gt;-u&lt;/span&gt; &lt;span class="nt"&gt;-k&lt;/span&gt; all

&lt;span class="c"&gt;# Configurar polkit (Ubuntu 24.04)&lt;/span&gt;
&lt;span class="nb"&gt;sudo mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /etc/polkit-1/rules.d
&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/polkit-1/rules.d/85-enable-hibernate.rules
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart systemd-logind

&lt;span class="c"&gt;# Testar&lt;/span&gt;
busctl call org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager CanHibernate
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl hibernate

&lt;span class="c"&gt;# Debug&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; /proc/cmdline
&lt;span class="nb"&gt;cat&lt;/span&gt; /sys/power/resume
&lt;span class="nb"&gt;cat&lt;/span&gt; /sys/power/resume_offset
pkcheck &lt;span class="nt"&gt;--action-id&lt;/span&gt; org.freedesktop.login1.hibernate &lt;span class="nt"&gt;--process&lt;/span&gt; &lt;span class="nv"&gt;$$&lt;/span&gt; &lt;span class="nt"&gt;--allow-user-interaction&lt;/span&gt; 2&amp;gt;&amp;amp;1
journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; systemd-logind &lt;span class="nt"&gt;-n&lt;/span&gt; 50
&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-la&lt;/span&gt; /etc/initramfs-tools/scripts/init-premount/
lsinitramfs /boot/initrd.img-&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;uname&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; resume
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🎯 Diferenças: Ubuntu vs Pop!_OS
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Passo&lt;/th&gt;
&lt;th&gt;Ubuntu&lt;/th&gt;
&lt;th&gt;Pop!_OS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bootloader&lt;/td&gt;
&lt;td&gt;GRUB&lt;/td&gt;
&lt;td&gt;systemd-boot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kernel params&lt;/td&gt;
&lt;td&gt;Edita &lt;code&gt;/etc/default/grub&lt;/code&gt; + &lt;code&gt;update-grub&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kernelstub -a&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Polkit (24.04+)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;.rules&lt;/code&gt; (JavaScript)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;.rules&lt;/code&gt; (JavaScript)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Initramfs&lt;/td&gt;
&lt;td&gt;&lt;code&gt;update-initramfs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;kernelstub&lt;/code&gt; + &lt;code&gt;update-initramfs&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  ❓ FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Preciso de swap maior que a RAM?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Recomendado:&lt;/strong&gt; Sim, pelo menos igual à RAM. Se você tem 32GB RAM, use 32GB+ de swap. O kernel precisa de espaço para salvar toda a RAM + algum overhead.&lt;/p&gt;

&lt;h3&gt;
  
  
  Posso usar swapfile em BTRFS?
&lt;/h3&gt;

&lt;p&gt;Sim, mas o offset é calculado de forma diferente. Use &lt;code&gt;btrfs inspect-internal map-swapfile&lt;/code&gt; em vez de &lt;code&gt;filefrag&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  O hibernate funciona com criptografia LUKS?
&lt;/h3&gt;

&lt;p&gt;Sim, mas o processo é diferente. O swap precisa estar dentro do container LUKS ou usar um swap criptografado separado. Não coberto neste guia.&lt;/p&gt;

&lt;h3&gt;
  
  
  O que acontece se o swap estiver cheio?
&lt;/h3&gt;

&lt;p&gt;O hibernate falha e o sistema continua ligado. Por isso é recomendado ter swap &amp;gt;= RAM.&lt;/p&gt;

&lt;h3&gt;
  
  
  Posso hibernar sem sudo?
&lt;/h3&gt;

&lt;p&gt;Com a regra do polkit configurada, usuários normais podem hibernar via interface gráfica (botão de hibernate no menu de energia).&lt;/p&gt;

&lt;h3&gt;
  
  
  Por que aparece &lt;code&gt;sh: write error: invalid argument&lt;/code&gt;?
&lt;/h3&gt;

&lt;p&gt;Isso acontece quando um script no initramfs (ex: &lt;code&gt;resume_swapfile&lt;/code&gt;) tenta escrever em &lt;code&gt;/sys/power/resume&lt;/code&gt; ou &lt;code&gt;/sys/power/resume_offset&lt;/code&gt;, mas o kernel já configurou esses valores via parâmetros do GRUB. A solução é &lt;strong&gt;remover o script&lt;/strong&gt; (veja Passo 3.5).&lt;/p&gt;

&lt;h3&gt;
  
  
  Preciso recalcular o offset depois de recriar o swap file?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Sim.&lt;/strong&gt; Sempre que você deletar e criar um novo &lt;code&gt;/swap.img&lt;/code&gt;, o offset físico do arquivo no disco muda. Você precisa:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Refazer o &lt;strong&gt;Passo 1&lt;/strong&gt; (&lt;code&gt;filefrag&lt;/code&gt;) para obter o novo offset&lt;/li&gt;
&lt;li&gt;Atualizar o &lt;strong&gt;Passo 2&lt;/strong&gt; (GRUB) com o novo offset&lt;/li&gt;
&lt;li&gt;Rodar &lt;code&gt;sudo update-grub&lt;/code&gt; e &lt;code&gt;sudo update-initramfs -u -k all&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  📚 Referências
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://wiki.archlinux.org/title/Power_management/Suspend_and_hibernate" rel="noopener noreferrer"&gt;Arch Wiki - Hibernation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.ubuntu.com/community/Hibernate" rel="noopener noreferrer"&gt;Ubuntu Wiki - Hibernate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.freedesktop.org/software/polkit/docs/latest/" rel="noopener noreferrer"&gt;Polkit Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.kernel.org/doc/html/latest/power/index.html" rel="noopener noreferrer"&gt;Kernel Documentation - Power Management&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📝 Changelog
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;2026-07-06&lt;/strong&gt; - Versão inicial com foco no Ubuntu 24.04, polkit .rules e swap file&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2026-07-06&lt;/strong&gt; - Adicionado: Erro &lt;code&gt;sh: write error: invalid argument&lt;/code&gt; e script &lt;code&gt;resume_swapfile&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2026-07-11&lt;/strong&gt; - Adicionado: Seção "Criar ou recriar o swap file" com comandos para deletar e recriar &lt;code&gt;/swap.img&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Autor:&lt;/strong&gt; Hallan + Kimi (sessão de debug colaborativa)&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Licença:&lt;/strong&gt; MIT - Use e modifique à vontade!&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ubuntu</category>
      <category>hibernation</category>
      <category>linux</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to configure ACP agents in Zed</title>
      <dc:creator>Hállan Costa</dc:creator>
      <pubDate>Tue, 24 Feb 2026 00:48:35 +0000</pubDate>
      <link>https://dev.to/hallancosta/how-to-configure-acp-agents-in-zed-521e</link>
      <guid>https://dev.to/hallancosta/how-to-configure-acp-agents-in-zed-521e</guid>
      <description>&lt;h2&gt;
  
  
  Configuration to add to Zed's settings.json:
&lt;/h2&gt;

&lt;p&gt;Copy this template and modify it&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"agent_servers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Claude - MiniMax  M2.5"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"custom"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/home/hallan/.local/bin/claudem25-agent-acp"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;How do I find the ACP directory to put in the command? You can use the command &lt;code&gt;which claudem25-agent-acp&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example of how it should look:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3hre16fps754e1a2ydid.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3hre16fps754e1a2ydid.png" alt=" " width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  He appears right here in the icon +
&lt;/h3&gt;

&lt;p&gt;Our new ACP agent, Claude, using the MiniMax, appears right down there.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8gg9qw5etd6v50yh2nr5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8gg9qw5etd6v50yh2nr5.png" alt=" " width="509" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  RELATED NOTES
&lt;/h2&gt;

&lt;p&gt;How to configure Claude CLI ACP for other compatible models, such as MiniMax M2.5&lt;br&gt;
&lt;a href="https://dev.to/hallancosta/how-to-configure-claude-cli-acp-for-other-compatible-models-such-as-minimax-m25-3j4n"&gt;https://dev.to/hallancosta/how-to-configure-claude-cli-acp-for-other-compatible-models-such-as-minimax-m25-3j4n&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How to Set Up Claude Code with Multiple AI Models&lt;br&gt;
&lt;a href="https://dev.to/hallancosta/how-to-set-up-claude-code-with-multiple-ai-models-4k6j"&gt;https://dev.to/hallancosta/how-to-set-up-claude-code-with-multiple-ai-models-4k6j&lt;/a&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>acp</category>
      <category>zed</category>
      <category>claude</category>
    </item>
    <item>
      <title>How to Set Up Claude Code with Multiple AI Models</title>
      <dc:creator>Hállan Costa</dc:creator>
      <pubDate>Tue, 24 Feb 2026 00:47:47 +0000</pubDate>
      <link>https://dev.to/hallancosta/how-to-set-up-claude-code-with-multiple-ai-models-4k6j</link>
      <guid>https://dev.to/hallancosta/how-to-set-up-claude-code-with-multiple-ai-models-4k6j</guid>
      <description>&lt;p&gt;This tutorial is fully based on a Reddit post for broader reach. All proper credit goes to ThreeKiloZero.&lt;/p&gt;

&lt;p&gt;Reddit post:&lt;br&gt;
&lt;a href="https://www.reddit.com/r/ClaudeCode/comments/1p27ly4/how_to_set_up_claude_code_with_multiple_ai_models/" rel="noopener noreferrer"&gt;https://www.reddit.com/r/ClaudeCode/comments/1p27ly4/how_to_set_up_claude_code_with_multiple_ai_models/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Author:&lt;br&gt;
&lt;a href="https://www.reddit.com/user/ThreeKiloZero/" rel="noopener noreferrer"&gt;https://www.reddit.com/user/ThreeKiloZero/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;This guide provides a simplified approach to configuring your terminal using Bash, allowing you to easily switch between different AI models when using Claude Code.&lt;br&gt;
The setup is also highly adaptable for &lt;code&gt;.zshrc&lt;/code&gt; and other shells, requiring only minor syntax adjustments for environment variables and functions.&lt;/p&gt;
&lt;h2&gt;
  
  
  What this does
&lt;/h2&gt;

&lt;p&gt;Instead of being limited to a single AI model, you will be able to run&lt;br&gt;
commands such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;claude&lt;/code&gt; - Uses the default Claude AI&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;claudekimi&lt;/code&gt; - Uses Kimi for coding&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;claudeglm&lt;/code&gt; - Uses Z.AI GLM models&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;claudem25&lt;/code&gt; - Uses MiniMax M2.5&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;claude m25&lt;/code&gt; or &lt;code&gt;claude kimi&lt;/code&gt; - Alternative way to switch models&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Before you start
&lt;/h2&gt;

&lt;p&gt;You will need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Claude Code installed on your computer (CLI version)&lt;/li&gt;
&lt;li&gt;  API keys for the AI services you want to use&lt;/li&gt;
&lt;li&gt;  Bash configured&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Step 1: Installing Claude Code
&lt;/h2&gt;

&lt;p&gt;If you do not have Claude Code installed yet, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://claude.ai/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Get your API keys
&lt;/h2&gt;

&lt;p&gt;Create accounts on the AI services you want to use and obtain your API&lt;br&gt;
keys:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Kimi for Coding&lt;/strong&gt;: Get your key from the Kimi developer portal&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Z.AI (GLM models)&lt;/strong&gt;: Get your key from Z.AI&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;MiniMax&lt;/strong&gt;: Get your key from MiniMax&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Store these keys in a safe place.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 3: Configure your API keys
&lt;/h2&gt;

&lt;p&gt;Open your Bash configuration file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the following lines, replacing them with your real API keys:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# API keys for different AI services&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;KIMI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-kimi-api-key"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ZAI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-zai-api-key"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;MINIMAX_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-minimax-api-key"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Add model configurations
&lt;/h2&gt;

&lt;p&gt;Run &lt;code&gt;which claude&lt;/code&gt; to get directory of claude&lt;/p&gt;

&lt;p&gt;Add these functions to your &lt;code&gt;~/.bashrc&lt;/code&gt; and change directory of claude:&lt;/p&gt;

&lt;h3&gt;
  
  
  Kimi for Coding
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claudekimi&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-z&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$KIMI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
        &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Error: KIMI_API_KEY is not set. Add it to ~/.bashrc"&lt;/span&gt;
        &lt;span class="k"&gt;return &lt;/span&gt;1
    &lt;span class="k"&gt;fi

    &lt;/span&gt;&lt;span class="nb"&gt;unset &lt;/span&gt;ANTHROPIC_API_KEY

    &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_BASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"https://api.kimi.com/coding/"&lt;/span&gt;
    &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_AUTH_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$KIMI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"kimi-for-coding"&lt;/span&gt;
    &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_SMALL_FAST_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"kimi-for-coding"&lt;/span&gt;

    &lt;span class="c"&gt;# Claude directory&lt;/span&gt;
    /home/&lt;span class="o"&gt;{&lt;/span&gt;yourusername&lt;span class="o"&gt;}&lt;/span&gt;/.local/bin/claude &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$@&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Z.AI GLM models
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claudeglm&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-z&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$ZAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
        &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Error: ZAI_API_KEY is not set. Add it to ~/.bashrc"&lt;/span&gt;
        &lt;span class="k"&gt;return &lt;/span&gt;1
    &lt;span class="k"&gt;fi

    &lt;/span&gt;&lt;span class="nb"&gt;unset &lt;/span&gt;ANTHROPIC_API_KEY

    &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_BASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"https://api.z.ai/api/anthropic"&lt;/span&gt;
    &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_AUTH_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$ZAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_DEFAULT_OPUS_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"glm-4.6"&lt;/span&gt;
    &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_DEFAULT_SONNET_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"glm-4.6"&lt;/span&gt;
    &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_DEFAULT_HAIKU_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"glm-4.5-air"&lt;/span&gt;

    &lt;span class="c"&gt;# Claude directory&lt;/span&gt;
    /home/&lt;span class="o"&gt;{&lt;/span&gt;yourusername&lt;span class="o"&gt;}&lt;/span&gt;/.local/bin/claude &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$@&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  MiniMax M2.5
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claudem25&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-z&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$MINIMAX_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
        &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Error: MINIMAX_API_KEY is not set. Add it to ~/.bashrc"&lt;/span&gt;
        &lt;span class="k"&gt;return &lt;/span&gt;1
    &lt;span class="k"&gt;fi

    &lt;/span&gt;&lt;span class="nb"&gt;unset &lt;/span&gt;ANTHROPIC_API_KEY

    &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_BASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"https://api.minimax.io/anthropic"&lt;/span&gt;
    &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_AUTH_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$MINIMAX_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;API_TIMEOUT_MS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"3000000"&lt;/span&gt;
    &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1

    &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"MiniMax-M2.5"&lt;/span&gt;
    &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_SMALL_FAST_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"MiniMax-M2.5"&lt;/span&gt;
    &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_DEFAULT_SONNET_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"MiniMax-M2.5"&lt;/span&gt;
    &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_DEFAULT_OPUS_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"MiniMax-M2.5"&lt;/span&gt;
    &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_DEFAULT_HAIKU_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"MiniMax-M2.5"&lt;/span&gt;

    &lt;span class="c"&gt;# Claude directory&lt;/span&gt;
    /home/&lt;span class="o"&gt;{&lt;/span&gt;yourusername&lt;span class="o"&gt;}&lt;/span&gt;/.local/bin/claude &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$@&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Dispatcher function (optional)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;first_arg&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$first_arg&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="k"&gt;in
        &lt;/span&gt;m25|M25&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nb"&gt;shift
            &lt;/span&gt;claudem25 &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$@&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;;;&lt;/span&gt;
        kimi|K2&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nb"&gt;shift
            &lt;/span&gt;claudekimi &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$@&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;;;&lt;/span&gt;
        glm|GLM&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nb"&gt;shift
            &lt;/span&gt;claudeglm &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$@&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;;;&lt;/span&gt;
        &lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            /home/&lt;span class="o"&gt;{&lt;/span&gt;yourusername&lt;span class="o"&gt;}&lt;/span&gt;/.local/bin/claude &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$@&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;;;&lt;/span&gt;
    &lt;span class="k"&gt;esac&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 5: Reload configuration
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 6: Test
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Kimi&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;claudekimi
&lt;span class="nv"&gt;$ &lt;/span&gt;claude kimi

&lt;span class="c"&gt;# MiniMax&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;claudem25
&lt;span class="nv"&gt;$ &lt;/span&gt;claude m25

&lt;span class="c"&gt;# GLM&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;claudeglm
&lt;span class="nv"&gt;$ &lt;/span&gt;claude glm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If everything is configured correctly, Claude Code will start using the&lt;br&gt;
selected AI model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Command not found
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Reload config&lt;/li&gt;
&lt;li&gt;  Verify function definitions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  API key not defined
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Check variables&lt;/li&gt;
&lt;li&gt;  Reload config&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Connection error
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Validate API key&lt;/li&gt;
&lt;li&gt;  Check internet connection&lt;/li&gt;
&lt;li&gt;  Confirm endpoint URL&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;Each function:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Checks API key&lt;/li&gt;
&lt;li&gt; Configures connection&lt;/li&gt;
&lt;li&gt; Runs Claude Code&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The dispatcher function selects the correct configuration automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding more AI models
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt; Add API key&lt;/li&gt;
&lt;li&gt; Create function&lt;/li&gt;
&lt;li&gt; Set base URL&lt;/li&gt;
&lt;li&gt; Set auth token&lt;/li&gt;
&lt;li&gt; Configure models&lt;/li&gt;
&lt;li&gt; Add to dispatcher&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;Done! You now have a flexible setup to switch between AI models with&lt;br&gt;
simple commands.&lt;/p&gt;

&lt;h2&gt;
  
  
  RELATED NOTES
&lt;/h2&gt;

&lt;p&gt;How to configure Claude CLI ACP for other compatible models, such as MiniMax M2.5&lt;br&gt;
&lt;a href="https://dev.to/hallancosta/how-to-configure-claude-cli-acp-for-other-compatible-models-such-as-minimax-m25-3j4n"&gt;https://dev.to/hallancosta/how-to-configure-claude-cli-acp-for-other-compatible-models-such-as-minimax-m25-3j4n&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How to configure ACP agents in Zed&lt;br&gt;
&lt;a href="https://dev.to/hallancosta/how-to-configure-acp-agents-in-zed-521e"&gt;https://dev.to/hallancosta/how-to-configure-acp-agents-in-zed-521e&lt;/a&gt;&lt;/p&gt;

</description>
      <category>claudecli</category>
      <category>minimax</category>
      <category>othermodels</category>
    </item>
    <item>
      <title>How to configure Claude CLI ACP for other compatible models, such as MiniMax M2.5</title>
      <dc:creator>Hállan Costa</dc:creator>
      <pubDate>Tue, 24 Feb 2026 00:46:12 +0000</pubDate>
      <link>https://dev.to/hallancosta/how-to-configure-claude-cli-acp-for-other-compatible-models-such-as-minimax-m25-3j4n</link>
      <guid>https://dev.to/hallancosta/how-to-configure-claude-cli-acp-for-other-compatible-models-such-as-minimax-m25-3j4n</guid>
      <description>&lt;p&gt;Guide to configure the Claude Agent ACP with the MiniMax API using Bash.&lt;/p&gt;

&lt;p&gt;This tutorial is fully adaptable for users of &lt;code&gt;.zshrc&lt;/code&gt; or other shells, with only minor changes to environment variable syntax and PATH configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Node.js installed&lt;/li&gt;
&lt;li&gt;MiniMax, Kimi, GLM account with an API Key&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1. Install Claude Agent ACP globally
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @zed-industries/claude-agent-acp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Configure environment variable
&lt;/h2&gt;

&lt;p&gt;Add to your &lt;code&gt;~/.bashrc&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Define node default on terminal (opcional)&lt;/span&gt;
&lt;span class="c"&gt;# Check the node version that @zed-industries/claude-agent-acp was installed globally.&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="nb"&gt;command&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; nvm &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;/dev/null 2&amp;gt;&amp;amp;1&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
   &lt;/span&gt;nvm use 24 &lt;span class="nt"&gt;--silent&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;

&lt;span class="c"&gt;# KIMI API Key&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;KIMI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-key-here"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Create the claudem25-agent-acp script
&lt;/h2&gt;

&lt;p&gt;Create the file &lt;code&gt;cat &amp;gt; ~/.local/bin/claudekimi-agent-acp&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/usr/bin/env bash&lt;/span&gt;
&lt;span class="c"&gt;# Bash script to run ACP with Kimi Coding API&lt;/span&gt;
&lt;span class="c"&gt;# Usage: claudekimi-agent-acp&lt;/span&gt;

&lt;span class="c"&gt;# Check if API key exists&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-z&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$KIMI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Error: KIMI_API_KEY is not defined."&lt;/span&gt;
    &lt;span class="nb"&gt;exit &lt;/span&gt;1
&lt;span class="k"&gt;fi&lt;/span&gt;

&lt;span class="c"&gt;# Clear existing Anthropic key&lt;/span&gt;
&lt;span class="nb"&gt;unset &lt;/span&gt;ANTHROPIC_API_KEY

&lt;span class="c"&gt;# Configure Kimi as Anthropic-compatible&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_AUTH_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$KIMI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_BASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"https://api.kimi.com/coding/"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;API_TIMEOUT_MS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"3000000"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ENABLE_TOOL_SEARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"false"&lt;/span&gt;

&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"kimi-for-coding"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_SMALL_FAST_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"kimi-for-coding"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_DEFAULT_SONNET_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"kimi-for-coding"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_DEFAULT_OPUS_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"kimi-for-coding"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_DEFAULT_HAIKU_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"kimi-for-coding"&lt;/span&gt;

&lt;span class="c"&gt;# Run ACP globally&lt;/span&gt;
claude-agent-acp &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$@&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Make it executable
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x ~/.local/bin/claudekimi-agent-acp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Ensure ~/.local/bin is in PATH
&lt;/h2&gt;

&lt;p&gt;Add to &lt;code&gt;~/.bashrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.local/bin:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Usage
&lt;/h2&gt;

&lt;p&gt;Now you can run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claudekimi-agent-acp
claudekimi-agent-acp &lt;span class="nt"&gt;--print-only&lt;/span&gt; &lt;span class="nt"&gt;--prompt&lt;/span&gt; &lt;span class="s2"&gt;"your task"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;claudem25-agent-acp&lt;/code&gt; uses the MiniMax API (M2.5 model)&lt;/li&gt;
&lt;li&gt;The official &lt;code&gt;claude-agent-acp&lt;/code&gt; continues to work with the Anthropic API&lt;/li&gt;
&lt;li&gt;Both can coexist without interfering with each other&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  RELATED NOTES
&lt;/h2&gt;

&lt;p&gt;How to Set Up Claude Code with Multiple AI Models&lt;br&gt;
&lt;a href="https://dev.to/hallancosta/how-to-set-up-claude-code-with-multiple-ai-models-4k6j"&gt;https://dev.to/hallancosta/how-to-set-up-claude-code-with-multiple-ai-models-4k6j&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How to configure ACP agents in Zed&lt;br&gt;
&lt;a href="https://dev.to/hallancosta/how-to-configure-acp-agents-in-zed-521e"&gt;https://dev.to/hallancosta/how-to-configure-acp-agents-in-zed-521e&lt;/a&gt;&lt;/p&gt;

</description>
      <category>claudecli</category>
      <category>acp</category>
      <category>bashrc</category>
      <category>zshrc</category>
    </item>
  </channel>
</rss>
