Categoria: PC

  • Non è possibile spegnere un MacBook

    Non è possibile spegnere un MacBook

    Oggi ho deciso di pulire la tastiera del MacBook Air M2, e l’operazione non si è rivelata così semplice quanto immaginavo. Spengo il Mac, attendo che si spenga lo schermo, tutto ok, inizio a pulire, ma premo un tasto e il Mac si riaccende.

    È vero, questo MacBook si riaccende con la pressione di qualsiasi tasto ma deve esserci un’impostazione che mi permetta di accenderlo solo con il tasto apposito, o con uno personalizzato. Cerco quindi online, convinto che esista un’opzione nascosta, un comando segreto, una preferenza da nerd, ma niente, non c’è, ed ho scoperto che per pulire davvero la tastiera senza rischiare accensioni involontarie bisognerebbe installare un’app di terze parti che disabilita tutti i pulsanti, ma davvero?

    E quindi voglio approfondire… non può essere un bug, deve essere per forza una cosa voluta. E scopro infatti che sui Mac con Apple Silicon l’accensione tramite tastiera non è una scelta software, ma una conseguenza diretta dell’architettura. Non esiste più un tasto di accensione separato: tastiera e trackpad sono sempre alimentati a bassissimo consumo e qualsiasi input viene considerato valido per il wake. Tutto passa dallo stesso flusso, integrato nel SoC.

    Nei PC tradizionali, invece, esiste un Embedded Controller separato che gestisce l’accensione e permette di decidere cosa può o non può svegliare la macchina. Il tasto power è un circuito a parte, filtrato, configurabile da BIOS. Qui no e questo spiega perché non esiste un’opzione nel sistema, né un comando da terminale, né una chiave nascosta, non è una funzione disattivabile ma un presupposto.

    Fin qui la spiegazione tecnica. Ma è proprio qui che nasce il problema. Dal punto di vista della user experience, infatti, cosa si guadagna davvero? Se non voglio spegnere il Mac, lo lascio acceso o in sospensione e funziona benissimo, ma se voglio spegnerlo dovrei poterlo fare davvero e non metterlo in uno stato di super risparmio energetico pronto a riaccendersi al primo contatto accidentale.

    Lo stato di stop esiste già ed è eccellente. Perché rendere ambiguo anche lo stato di spento? Questa scelta infatti introduce effetti collaterali concreti proprio come il computer che parte mentre stai pulendo la tastiera.

    Apple ha probabilmente fatto una valutazione diversa. Trattare ogni input come evento valido di wake semplifica l’hardware, riduce i consumi, elimina stati intermedi problematici e riduce le superfici di errore. In più, sposta completamente il concetto di sicurezza sull’autenticazione e sulla cifratura: se il disco è protetto da FileVault e Secure Enclave, che il Mac si accenda o meno diventa irrilevante.

    Ma qui entra in gioco anche una scelta di marketing e di visione del prodotto. Apple non vuole che il Mac venga percepito come un oggetto da accendere e spegnere. Vuole che sia visto come qualcosa che è sempre pronto, sempre disponibile, come un iPhone o un iPad. Premere un tasto qualsiasi per svegliare il Mac non è un bug, è un messaggio. Il messaggio è: non preoccuparti dello stato della macchina, pensiamo a tutto noi.

    Il problema è cosa si perde lungo la strada. Si perde controllo. Si perde chiarezza. Si perde la possibilità di decidere realmente quando la macchina è completamente inattiva.

    A questo punto la mia teoria: Apple potrebbe aver confuso l’utente mobile con quello desktop. Con il telefono lo portiamo sempre con noi, è sempre acceso o in standby e questo è perfettamente coerente. Con un MacBook le cose sono diverse: non lo portiamo sempre in tasca, potremmo non usarlo per giorni o settimane, per esempio in vacanza, e averlo sempre attivo è controproducente. Certo, la batteria consuma comunque un po’, ma sappiamo che le Li-ion non possono essere scaricate completamente; Apple avrà probabilmente previsto un livello minimo di sicurezza per la batteria.

    La domanda finale è inevitabile: cosa si guadagna con questa scelta per l’utente finale e cosa si perde? I benefici sono quasi tutti interni: ingegneria, coerenza, semplificazione. I costi ricadono su chi usa la macchina in modo consapevole.

    Il MacBook Air M2 resta una macchina eccellente ma questa storia racconta bene il tipo di compromesso che Apple è disposta ad accettare: hanno fatto una scelta coerente con la loro visione del prodotto, ma non la rispetto pienamente. Avrebbero potuto rendere felici tutti, utenti che si accontentano delle scelte fatte da Apple e utenti più esperti che avrebbero potuto decidere di attivare lo spegnimento solo con il tasto power. Invece hanno deciso di non offrire questa opzione. Anche così, resta un prodotto straordinario, ma per chi vuole più controllo, rimangono dei grossi limiti.

  • La maledetta RTL8168 e Linux

    La maledetta RTL8168 e Linux

    Diciamo che non mi accade così spesso di configurare una nuova macchina Linux bare metal, per cui mi sento un po’ giustificato, ma vorrei raccontare delle maledizioni di quando mi accorgo che ancora una volta la macchina che sto configurando ha un NIC RTL8111/8168/8411 e Linux mi carica automaticamente il modulo r8169. Ora diciamola tutta, la scheda non è così poco diffusa, è quella che generalmente viene montata sulle schede madri con LAN 1Gbps, la cosiddetta Gigabit LAN, ed il driver caricato di default, è caricato di default da quanto? 10 anni? ok la storia è questa. Ma è anche probabile che a qualcuno questo modulo funzioni correttamente anche sulla RTL8168, perché il team di sviluppo dice che negli ultimi anni ci ha lavorato, tant’è che sul repository ufficiale del modulo r8168 si legge:

    If you are using r8168-dkms because the in-kernel r8169 does not
    support your NIC or is not working properly, please check the
    following:
    
    * Have you tried a more recent kernel? The problem may be fixed
      there already. In that case the current r8169 driver may be
      ported back to an older kernel - please report a bug against
      the Debian kernel package where r8169 is not working as
      expected.
    
    * If no version of the in-kernel driver r8169 supports your NIC,
      please report this to the r8169 maintainers, so that this can
      be fixed:
    
        To: Realtek linux nic maintainers <[email protected]>
        To: Francois Romieu <[email protected]>
        Cc: [email protected]
    
      You may also wish to open a Debian bug report (against the
      src:linux package) and Cc that.
    
    
    If you want to switch back from r8168-dkms to the in-kernel r8169
    driver it is necessary to purge the r8168-dkms package,
    otherwise the blacklist for r8169 won't be removed.
    

    Sarà… ma il mio Proxmox 8.2.9 con quel modulo continuava a fare il downshift, mandandomi questo bellissimo messaggio:

    r8169 0000:01:00.0 enp1s0: Link is Up - 100Mbps/Full (downshifted) - flow control off

    Unica soluzione quindi installare il modulo specifico, ed ecco come ho fatto.

    Prima di tutto un po’ di precisazioni, si tratta di una macchina con Proxmox aggiornata alla 8.2.9 (al momento in cui scrivo l’ultimissima), quindi in caso abbiate distro differenti alcuni comandi cambiano.

    La procedura “sarebbe”:

    1. aggiungo ai sorgenti apt le repository non-free e non-free-firmware;
    2. installo pve-headers e r8168-dkms con apt-install -y pve-headers r8168-dkms;
    3. per sicurezza blacklisto il modulo r8169;
    4. faccio il build ed installo il modulo con dkms build r8168/8.051.02 && dkms install r8168/8.051.02;
    5. attivo il modulo con modprobe r8168;
    6. riavvio networking con systemctl restart networking

    Parlo al condizionale perché il build, con l’ultima versione del kernel, restituisce errore… eppure il modulo è all’ultima versione della repository.

    Faccio una ricerca online e trovo però che l’ultima versione rilasciata del modulo (non ancora nella repository perché taggata unstable) è recentissima, di 3 settimane fa, decido quindi di installare questa. La procedura completa quindi è la seguente:

    # Installo pve-headers e dkms
    apt install -y pve-headers dkms
    
    # Scarico il modulo aggiornato, lo estraggo e ne copio il contenuto in /usr/src
    cd /tmp
    wget https://ftp.debian.org/debian/pool/non-free/r/r8168/r8168_8.054.00.orig.tar.bz2
    tar -xf r8168_8.054.00.orig.tar.bz2
    rm r8168_8.054.00.orig.tar.bz2
    mkdir -p /usr/src/r8168-8.054.00/
    mv ./r8168_8.054.00/src/* /usr/src/r8168-8.054.00/
    rm -rf r8168_8.054.00
    
    # Creo il file dkms.conf (la versione potrebbe differire)
    echo PACKAGE_NAME="r8168" > /usr/src/r8168-8.054.00/dkms.conf
    echo PACKAGE_VERSION="8.054.00" >> /usr/src/r8168-8.054.00/dkms.conf
    echo BUILT_MODULE_NAME[0]="$PACKAGE_NAME" >> /usr/src/r8168-8.054.00/dkms.conf
    echo DEST_MODULE_LOCATION[0]="/updates/dkms" >> /usr/src/r8168-8.054.00/dkms.conf
    echo AUTOINSTALL="YES" >> /usr/src/r8168-8.054.00/dkms.conf
    echo REMAKE_INITRD="YES" >> /usr/src/r8168-8.054.00/dkms.conf
    
    # Procedo a build ed installazione del modulo
    dkms add -m r8168 -v 8.054.00
    dkms build -m r8168 -v 8.054.00 -k $(uname -r)
    dkms install -m r8168 -v 8.054.00 -k $(uname -r)
    
    modprobe r8168
    systemctl restart networking
    
    # Eventualmente rimuovo la versione precedente del modulo
    dkms remove r8168/8.051.02 --all

    Per sicurezza aggiungo il modulo r8169 alla blacklist di pve, aggiungendo quindi blacklist r8169 al file /etc/modprobe.d/pve-blacklist.conf.

    echo "blacklist r8169" | sudo tee -a /etc/modprobe.d/pve-blacklist.conf

    Dopo aver seguito tutti i passaggi, lanciando un lspci -k dovremmo vedere:

    01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)
            Subsystem: Realtek Semiconductor Co., Ltd. RTL8111/8168/8211/8411 PCI Express Gigabit Ethernet Controller
            Kernel driver in use: r8169
            Kernel modules: r8168

    Il driver in uso è r8169 perché ancora non abbiamo riavviato, a seguito del reboot avremo:

    01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)
            Subsystem: Realtek Semiconductor Co., Ltd. RTL8111/8168/8211/8411 PCI Express Gigabit Ethernet Controller
            Kernel driver in use: r8168
            Kernel modules: r8169, r8168

    Con questa procedura ho installato il modulo per la scheda NIC RTL8168 aggiornato, in modo che il sistema non carichi più la versione generica r8169 ma utilizzi quella specifica per la scheda in vostro possesso.

  • NVME su RaspberryPi 5, ma non ho l’adattatore 🤔

    Pronto per approfondire la mia esperienza con questo nuovo RasPi ho acquistato l’hat per l’installazione di un NVME. Come ho già spiegato, non consiglio di adottare un hat con più di uno slot M.2, in quanto la lane al massimo regge un NVME a velocità quasi massima, adottarne due non farebbe altro che dimezzarne le prestazioni. Mi sono però subito imbattuto in un problema, come installare il sistema operativo sull’NVME dato che non ho a disposizione un adattatore da NVME a USB3.0? ho dovuto quindi escogitare una soluzione alternativa.

    Sul RaspberryPi 5 avevo già in funzione una versione di Raspbian su SD, ho installato quindi una nuova immagine di Raspbian con il metodo classico su una seconda scheda SD, di qualsiasi dimensione, non importa… anzi deve essere di capacità inferiore a quella dell’NVME. Poi ho installato l’hat con l’NVME ed ho verificato che il sistema lo leggesse. A questo punto ho collegato, tramite un lettore usb, l’SD con l’immagine del sistema operativo e con il comando dd ne ho trasferito il contenuto sull’NVME:

    dd if=/dev/sdb of=/dev/nvme0n1 status=progress

    Nel comando dd il parametro if identifica l’input disk (sorgente), il parametro of identifica l’output disk (destinazione) mentre l’opzione status=progress mostra la barra di avanzamento. Ovviamente i percorsi possono cambiare, potete verificarli con il comando lsblk.

    Terminata la copia, l’NVME sarà pronto per effettuare il boot. Se avete effettuato gli stessi passaggi svolti da me non occorrerà effettuare alcun ridimensionamento dell’unità nel caso la dimensione dell’NVME fosse superiore a quella della SD in quanto il Raspberry Pi in fase di attivazione effettua già di predefinito l’estensione dell’unità.

    A questo punto ho impostato l’unità NVME come predefinita, tenendo comunque conto del fatto che rimuovendo l’SD, il boot avverrà comunque dall’NVME. Ho effettuato l’operazione molto semplicemente con il comando raspi-config, che serve anche ad impostare il PCIe a Gen 3.0, utile a ridurre al minimo il collo di bottiglia bus – NVME. Dopo aver lanciato il comando, quindi, ho selezionato il menu “6. Advanced Options” e poi “A4. Boot Order” per andare ad impostare l’NVME come primo device al boot. Poi ho selezionato “A8. PCIe Speed” ed ho risposto “Sì” alla domanda “Would you like PCIe Gen 3 to be enabled?”.

    Fatto questo ho riavviato il Raspberry Pi 5 per iniziare l’installazione del sistema operativo su NVME.

  • Il mouse risveglia Windows e non va in sospensione

    Sembra strano ma a volte ci abituiamo a delle routine e dopo tempo ci sembra anche normale svolgere determinate operazioni. In particolare, quando stacco dal PC sono abituato a metterlo in sospensione ma costantemente il mouse lo risveglia, è praticamente impossibile mettere in sospensione Windows perché quando si clicca sul pulsante per attivare la sospensione Windows già recepisce il comando di wake up dal mouse quindi il sistema va in sospensione per un solo secondo per poi riattivarsi. Cosa ho fatto fino a ieri? posizionavo il mouse su “Sospendi”, spegnevo il mouse ed attivavo la sospensione con invio… ma appunto fino a ieri, perché mi sono finalmente chiesto “perché tutto ciò?”.

    La soluzione ovviamente è semplice: disattivare il risveglio con il mouse. In questo modo rimane attivo solo quello con la tastiera, oltre che con il pulsante di accensione, ma dove si trova questa opzione? è un po’ nascosta su Windows 11, bisogna cercare “Impostazioni del mouse”, poi “impostazioni aggiuntive per il mouse”, “Hardware” e poi “Proprietà”. Poi “Generali”, “Impostazioni” ed infine “Risparmio energia”. Qui, alla fine, dopo tanti giri, troveremo l’opzione “Consenti al dispositivo di riattivare il computer”, che va ovviamente disattivata.

    Da ieri non ho più la mia routine 😛