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.311 ]
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."
Aplica quotas a partir de um arquivo gerado pelo repquota.
Backup de Maquina Virtual (Vmware)
Script para criar usuarios Dialup
Script de iniclização do Exim para Funcionamento com MailScanner
Backup com data no nome do arquivo
Nenhum comentário foi encontrado.
Cinnamon seria a aposta acertada frente às outras interfaces gráficas mais populares?
KDE Plasma - porque pode ser a melhor opção de interface gráfica
Gentoo: detectando impressoras de rede e como fixar uma impressora por IP
Como o GNOME conseguiu o feito de ser preterido por outras interfaces gráficas
Por que sua empresa precisa de uma PKI (e como automatizar EMISSÕES de certificados via Web API)
Instalando NoMachine no Gentoo com Systemd (acesso Remoto em LAN)
Vou destruir sua infância:) (8)
Interface gráfica com problema (2)
Instalar Linux em notebook Sony Vaio VPCEG13EB (13)









