SetFocus su TextBox quando il Form non è Modal

Mi è capitato di tribolare per impostare il focus su un form quando lo visualizzo con:

MyForm.show 0

Per risolvere il problema bisogna catturare l’evento “Activate”; ad esempio:

Private Sub UserForm_Activate()
    ' Configura il focus al TextBox_Input.
    With TextBox_Input
        .SetFocus
        .SelStart = 0
        .SelLength = Len(.Text)
    End With
End Sub

Montare una cartella condivisa di Windows Server 2022 su Debian 12 (risolvendo “Permission denied”)

Montare una cartella condivisa SMB su Linux a volte può sembrare semplice… finché non appare il temuto errore:

mount error(13): Permission denied
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs) and kernel log messages (dmesg)

Ecco come risolvere il problema passo per passo.

Leggi tutto: Montare una cartella condivisa di Windows Server 2022 su Debian 12 (risolvendo “Permission denied”)

Scenario

  • Server Linux: Debian 12.x
  • Server Windows: Windows Server 2022, Domain Controller
  • Condivisione SMB: //SERVER-NOME/Condivisione
  • Dominio Active Directory: DOMINIO.LOCAL
  • Utente dominio: username

Sintomo

Montando con:

sudo mount /mnt/Condivisione

compare l’errore “Permission denied” e nei log (dmesg) appare:

CIFS: Status code returned 0xc000006d STATUS_LOGON_FAILURE

Causa

mount.cifs gestisce in modo diverso le credenziali rispetto a smbclient.
Mentre con smbclient funziona:

smbclient -L //SERVER-NOME -U "DOMINIO\\username%password"

con mount.cifs il backslash (\) nell’username causa un fallimento dell’autenticazione.

Soluzione

1. Crea la directory di mount

sudo mkdir -p /mnt/Condivisione

2. Crea un file credenziali sicuro

Crea /etc/samba/credentials/server:

username=nome_utente
password=password_complicata_e_sicura
domain=DOMINIO

Nota: Usa domain=DOMINIO (NetBIOS), non DOMINIO.LOCAL.

(ovviamente devi personalizzare i valori del file!)

Imposta i permessi:

sudo chmod 600 /etc/samba/credentials/server

3. Aggiungi la riga in /etc/fstab:

//SERVER-NOME/Condivisione /mnt/Condivisione cifs credentials=/etc/samba/credentials/server,iocharset=utf8,vers=3.1.1,sec=ntlmssp,uid=1000,gid=1000,file_mode=0660,dir_mode=0770 0 0

(si tratta di un’unica riga, mi raccomando!)

Parametri chiave:

  • vers=3.1.1 → protocollo SMB di default su Windows Server 2022
  • sec=ntlmssp → autenticazione moderna supportata da AD
  • uid e gid → proprietario dei file su Linux
  • file_mode e dir_mode → permessi di default

Per eseguire il mount senza errori, dovrebbe bastare un semplice:

sudo mount /mnt/Condivisione

Imaging Triage

Ho realizzato una piccola app che consente di suddividere facilmente le immagini gestite dal software “Imaging Edge Desktop” (IEDT) prodotto da Sony.

UI di Imaging Triage

Ho previsto la possibilità di scaricarlo già compilato per Windows da qui: https://github.com/andreaorlandoit/ImagingTriage/releases

Dopo aver associato un rating o un colore alle foto è possibile -previa selezione di tutte le foto, ad esempio, con ctrl+a – usare il comando “File > Esporta valutazione ed etichetta colore in formato XMP”.

A questo punto si può lanciare il software (per averlo in lingua italiana, basta cliccare su “Config” e scegliere “it” in “Application Language”) e scegliere “Sfoglia…” per navigare nella cartella contenente le immagini, quindi, premere “Elabora”.

Autiomaticamente le immagini ed i corrispondenti file XMP saranno spostati in opportune sottocartelle, in base al rating e/o al colore associato alle immagini.

Per annullare l’operazione è possibile abilitare il check-box “Raccogli i file dalle sottocartelle (Annulla)” e premere “Elabora”.

È anche possibile evitare che vengano spostati i file privi di valutazione, tramite il check-box “Non spostare i file privi di valutazione”.

Il programma supporta nativamente queste estensioni:

  • arw
  • arq
  • axr
  • jpg
  • jpeg
  • tif
  • tiff
  • heif

Ma – tramite il pulsante “Configura”, che apre apposita finestra di configurazione – è possibile gestire anche altre estensioni, semplicemente separandole da una virgola.

A fine elaborazione, viene sempre mostrato un rapporto su quanto eseguito.

Spero troviate (in)utile l’applicazione, fatemi sapere!

Copia guidata impostazioni di SOLIDWORKS: Impossibile caricare le informazioni sulle impostazioni di SOLIDWORKS da ‘nome.utente’.

Ti capita di voler salvare le impostazioni di SolidWorks e ottieni questo messaggio di errore:

Leggi tutto “Copia guidata impostazioni di SOLIDWORKS: Impossibile caricare le informazioni sulle impostazioni di SOLIDWORKS da ‘nome.utente’.”

Firefox: Si apre un sito diverso dal previsto

Mi è capitato con Google Foto: si apriva la pagina della guida di Google, non “photos.google.com”.

Non solo: uscendo dall’account per fare login nuovamente, ritornava sempre sulla pagina della Guida di Google, non c’era più verso di fare login!

Leggi tutto “Firefox: Si apre un sito diverso dal previsto”

Un Batch per archiviare una cartella tramite 7z usando Invia A di Windows

Creare un bat per Windows che utilizza 7z per archiviare una cartella selezionata in Esplora File ed inviata tramite “invia a” del menu contestuale.

Forse servirà solo a me ma – spesso – mi trovo ad archiviare una cartella, prima di modificarla, per averne una copia di backup.

Però mi piace che il backup abbia un “codice di versione”, ovvero: se archivio la cartella “pippo” voglio che l’archivio si chiami “pippo_2024-11-02_2034.7z” dove, tutto quello che viene dopo “pippo”, è un codice progressivo che identifica data e ora di creazione del backup, così che siano sequenziali, in ordine.

Per farlo, procedere come segue:

1] Aprire la cartella del “Invia a:” di Windows; usare win+r e digitare:

shell:sendto

2] Nella cartella che si apre, creare un file di testo e rinominarlo come:

ARCHIVIA_CARTELLA.bat

3] Aprire in modifica il file di cui sopra ed incollare il seguente codice:

@echo off
setlocal enabledelayedexpansion

:: ******************************************************************
:: Script per creare l'archivio della cartella passato come parametro, usando
:: 7z ed associando un codice progressivo automaticamente.
::
:: Versione 202-11-02
:: budus@hotmail.it
:: ******************************************************************

set percorso7z=
set archive_code=
set archive_name=

:: Immagazzina la data e ora corrente.
for /f "tokens=1-4 delims=/ " %%a in ('date /t') do (
	set anno=%%c
	set mese=%%b
	set giorno=%%a
)

for /f "tokens=1-2 delims=: " %%a in ('time /t') do (
	set ora=%%a
	set minuti=%%b
)

set archive_code=!anno!-!mese:~0,2!-!giorno:~0,2!_!ora:~0,2!!minuti:~0,2!

:: Verifica che il parametro sia una cartella e che esista.
if exist "%~1" (
	if not exist "%~1\*.*" (
		echo [I] Il percorso
		echo     "%~1"
		echo     e' una cartella vuota.
	) else (
		if exist "%~1\*" (
			echo [I] Il percorso
			echo     "%~1"
			echo     e' una cartella.
		) else (
			echo [I] Il parametro
			echo     "%~1"
			echo     risulta essere un file.
			goto end_with_error
		)
	)
) else (
	echo [I] Il parametro
	echo     "%~1"
	echo     non risulta essere una cartella.

	goto end_with_error
)

:: Estrapola il nome della cartella da archiviare.
for /f "delims=" %%a in ("%~1") do (
	set archive_name=%%~nxa
)

echo [I] Archiviazione della cartella:
echo     %1
echo     con il codice: %archive_code%
echo     nell'archivio: %archive_name%

for /f "delims=" %%a in ('where /R "%ProgramFiles%" 7z.exe') do (
	if not defined percorso7z set percorso7z=%%a
	goto end
)

:end
:: Se non è stato trovato 7z, emette errore.
if not defined percorso7z goto error__no7z

:: Esegue l'archiviazione usando 7z.
"%percorso7z%" a -bd -- "%archive_name%_%archive_code%" "%~1"
timeout 3
exit /B %errorlevel%


:error__no7z
echo [E] 7z non e' stato trovato in:
echo     %ProgramFiles%

:end_with_error
@pause
exit /B 1

4] Chiudere e salvare il file bat.

Ora è sufficiente usare il menu contestuale di Esplora File di Windows (per Windows 11 si rende necessario aprire le opzioni aggiuntive, cosa fattibile se si tiene premuto il tasto Maiuscola/Shift), quindi, “Invia a” e “ARCHIVIA_CARTELLA.bat”.

Nel bat ho messo diversi commenti, dovrebbe essere chiaro (sì, fino ad un certo punto, me ne rendo conto …) cosa fa ogni pezzo di codice. Se proprio siete curiosi di approfondire, potete chiedermelo o usare qualsiasi AI ed incollare la porzione di codice che vi lascia perplessi, se non l’intero script.

Nel caso in cui preferiate eliminare la cartella dopo l’archiviazione, potente modificare la riga:

"%percorso7z%" a -bd -- "%archive_name%_%archive_code%" "%~1"

in:

"%percorso7z%" a -bd -sdel -- "%archive_name%_%archive_code%" "%~1"

error: cannot communicate with server: Post http://localhost/v2/snaps/core: dial unix /run/snapd.socket: connect: no such file or directory

Provando ad usare il comando:

snap list

a seguito dell’installazione di snapd, tramite i seguenti comandi:

apt update
apt install snapd

su una distribuzione GNU Linux/Debian 10.13 (ormai vecchiotta, ma è LTS, prima o poi dovrò aggiornarla), ottengo l’errore in oggetto.

Il problema è dovuto al fatto che il demone è stato sì installato, ma non attivato!

Per farlo, usare:

systemctl enable snapd.service
systemctl start snapd.service

Se non parte, beh, significa che c’è qualche problema nel sistema e bisogna indagare, cercando in giro, mi spiace.

Roundcube: PHP Fatal error: Uncaught Error: Call to undefined method rcmail::action_handler()

Aggiornando il Client di Posta Roundcube, mi è capitato di ricevere il messaggio in oggetto.

Per risolvere il problema:

systemctl restart apache2

Sì, è sufficiente riavviare il web-server per aggiornare la cache di PHP.

Nel mio caso, il problema, non si presentava cercando di accedere alla cartella dove effettivamente ho installato Roundcube mentre, usando il solito percorso (in pratica un link simbolico alla cartella dove ho installato, cosicché possa installare più versioni e modificare il link per decidere quale usare … più che altro uso questo modus operandi durante l’aggiornamento), ottenevo un errore subito dopo il login (maledettamente non l’ho salvato).

Spero la cosa vi aiuti.