Com esse script a mensagem fica até o final do processo evitando corrompimento de dados, depois é só ejetar o dispositivo externo.
Verá que a mensagem "Copiando arquivo numero_tal de numero_tal em..." fica até o final, bastando depois ejetar o dispositivo externo (pendrive, SD, HD, etc) antes de retirá-lo.
Foi testado no Debian 13 com Nemo-6.4.5, mas deve funcionar em outras versões bastando modificar as versões das bibliotecas nas dependências.
Utilize este script para aplicar o patch no Nemo:
#!/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"
# 1️⃣ Instalar 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
# 2️⃣ Criar diretório de build
BUILD_DIR="$HOME/nemo-build"
mkdir -p "$BUILD_DIR"
cd "$BUILD_DIR"
# 3️⃣ Baixar source package do Nemo
apt-get source "$PACKAGE"
sudo apt build-dep -y "$PACKAGE"
# 4️⃣ Entrar no source
SRC_DIR=$(find . -maxdepth 1 -type d -name "$PACKAGE*")
cd "$SRC_DIR"
# 5️⃣ Criar 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
# 6️⃣ Inicializar quilt e registrar 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
# 7️⃣ Aplicar todos os patches
quilt push -a
# 8️⃣ Construir o pacote sem assinar
dpkg-buildpackage -us -uc
# 9️⃣ Instalar 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."

Nenhum comentário:
Postar um comentário