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: 1.327 ]
Homepage: Website
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.
#!/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."
Backup de arquivos do Linux para um servidor FTP
Verificar conexão com Internet
Script para checagem de Ponto de Acesso.
NetScan - o seu scanner de rede!
Nenhum comentário foi encontrado.
XFCE - quase um Gnome ou Plasma mas muito mais leve
LXQT - funcional para máquinas pererecas e usuários menos exigentes
Samba 4 AD-DC 2026: Como instalar e configurar um Active Directory (via APT-GET)
[Resolvido] Sumiço de redes e micro quedas no iwd/iwgtk (Realtek rtw88)
Como Configurar DNS Reverso (PTR) em Ambientes Linux e Microsoft
Preparando o Ambiente para Administrar o Samba 4 a partir do Windows com RSAT









