Script que sincroniza a mensagem de cópia de pendrive com o processo real

Publicado por Buckminster (última atualização em 17/12/2025)

[ Hits: 90 ]

Homepage: Website

Download build-nemo.sh




Esse script resolve o problema da mensagem de cópia de dispositivos externos (pendrives, SDs e HDs externos, etc) do Nemo/Cinnamon que não ficava até o final causando dados corrompidos, pois o usuário não sabia quando o processo de cópia tinha terminado e removia o dispositivo externo.
Com esse script a mensagem fica até o final do processo evitando corrompimento de dados, depois é só ejetar o dispositivo externo.
Foi testado no Debian 13 com Nemo-6.4.5.

  



Esconder código-fonte

#!/bin/bash
set -e

# Script para compilar Nemo com patch de notificação de cópia para dispositivos removíveis
# Totalmente automático para Debian/Ubuntu

PACKAGE="nemo"
PATCH_NAME="0001-progress-ui-handler-removable-sync.patch"

# Instala dependências de build
sudo apt update
sudo apt install -y build-essential devscripts debhelper dh-autoreconf \
                    libgtk-4-dev libglib2.0-dev libgirepository1.0-dev \
                    libsqlite3-dev libnotify-dev libx11-dev git quilt

# Cria diretório de build
BUILD_DIR="$HOME/nemo-build"
mkdir -p "$BUILD_DIR"
cd "$BUILD_DIR"

# Baixa source package do Nemo
apt-get source "$PACKAGE"
sudo apt build-dep -y "$PACKAGE"

# Entra no source
SRC_DIR=$(find . -maxdepth 1 -type d -name "$PACKAGE*")
cd "$SRC_DIR"

# Cria patch completo automaticamente
PATCH_FILE="debian/patches/$PATCH_NAME"

mkdir -p debian/patches

cat > "$PATCH_FILE" << 'EOF'
*** a/src/nemo-progress-ui-handler.c
*** b/src/nemo-progress-ui-handler.c
@@
-  /* Operação finalizada, encerrar notificação */
-  nemo_progress_ui_handler_remove(info);
+  /* Operação finalizada */
+  gboolean is_removable = FALSE;
+  GFile *dest_file = info->dest_file; /* destino da cópia */
+
+  if (dest_file)
+  {
+      GError *error = NULL;
+      GFileInfo *fs_info = g_file_query_filesystem_info(
+          dest_file,
+          "filesystem::removable",
+          NULL,
+          &error);
+
+      if (fs_info)
+      {
+          is_removable = g_file_info_get_attribute_boolean(fs_info, "filesystem::removable");
+          g_object_unref(fs_info);
+      }
+      if (error)
+          g_error_free(error);
+  }
+
+  if (is_removable)
+  {
+      nemo_progress_ui_handler_update_message(info, _("Sincronizando dados no dispositivo..."));
+      g_file_sync_async(dest_file,
+                        G_FILE_QUERY_INFO_NONE,
+                        G_PRIORITY_DEFAULT,
+                        NULL,
+                        (GAsyncReadyCallback)nemo_progress_ui_handler_remove_on_sync,
+                        info);
+  }
+  else
+  {
+      nemo_progress_ui_handler_remove(info);
+  }
+
+static void
+nemo_progress_ui_handler_remove_on_sync (GObject      *source_object,
+                                        GAsyncResult *res,
+                                        gpointer      user_data)
+{
+    NemoProgressInfo *info = user_data;
+    GFile *file = G_FILE(source_object);
+    GError *error = NULL;
+
+    g_file_sync_finish(file, res, &error);
+    if (error)
+    {
+        g_warning("Erro ao sincronizar arquivo %s: %s",
+                  g_file_get_path(file), error->message);
+        g_error_free(error);
+    }
+
+    nemo_progress_ui_handler_remove(info);
+}
EOF

# Inicializa quilt e registra patch
export QUILT_PATCHES=debian/patches
export QUILT_SERIES=debian/patches/series

if ! grep -q "$PATCH_NAME" "$QUILT_SERIES" 2>/dev/null; then
  echo "$PATCH_NAME" >> debian/patches/series
fi

# Aplica todos os patches
quilt push -a

# Constrói o pacote sem assinar
dpkg-buildpackage -us -uc

# Instala o pacote gerado
cd ..
sudo dpkg -i ${PACKAGE}_*.deb

echo "Nemo compilado e instalado com patch aplicado automaticamente!"
echo "Teste copiando arquivos para um pendrive e observe a notificação."

Scripts recomendados

Bash script para converter decimal para hexadecimal mole!

Cadastrar usuario Squid

Removendo kernels antigos no Ubuntu

POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - CRIANDO O AMBIENTE

Compara igualdade entre arquivos


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts