sabato 6 ottobre 2012

[Risolto] Il volume di sistema in KDE è agganciato a quello di VLC

Non sono riuscito a trovare un'espressione migliore per descrivere il problema: alzando il volume di VLC aumenta anche il volume di sistema, in KDE. Per la precisione, il volume di sistema è sempre maggiore o uguale a quello di VLC. In realtà non è un problema né di KDE (si presenta anche negli altri ambienti desktop) né di VLC (si presenta anche con gli altri programmi, per esempio l'ho riscontrato in Dragon Player), ma di una configurazione predefinita poco felice di PulseAudio. È facile imbattersi in questo problema usando KDE perché questo ambiente desktop usa in maniera predefinita PulseAudio. Nel manuale del demone di configurazione di Pulseaudio (man pulse-daemon.conf) si legge
flat-volumes=  Enable  'flat' volumes, i.e. where possible let the sink
volume equal the maximum of the volumes of the inputs connected to  it.
Takes a boolean argument, defaults to yes.
Per risolvere il problema bisogna modificare il file /etc/pulse/daemon.conf con il proprio editor di testo preferito e con i diritti di amministratore. Per esempio, volendo usare Kwrite per aprire il file si può dare il seguente comando nel terminale
kdesudo kwrite /etc/pulse/daemon.conf
Dopo di ciò si deve impostare la variabile flat-volumes al valore no, per inibire il comportamento descritto nel manuale. Nel file dovrebbe essere già presente la riga
; flat-volumes = yes
In questo caso, togliere il simbolo di commento ; e cambiare il valore della variabile da yes a no. Se la riga precedente non è presente, aggiungete semplicemente da qualche parte la riga
flat-volumes = no
Dopo aver salvato e chiuso il file, per concludere bisogna riavviare Pulseaudio da terminale con il comando
pulseaudio --kill && pulseaudio --start

Ho trovato questa soluzione qui: https://wiki.archlinux.org/index.php/PulseAudio_%28Italiano%29#Il_livello_del_volume_si_alza_ogni_volta_che_una_nuova_applicazione_viene_avviata.

sabato 29 settembre 2012

Massimizzare la finestra di GNU Emacs in KDE

Nell'ambiente desktop KDE, la finestra dell'interfaccia grafica GTK+ di Emacs non viene massimizzata correttamente, come mostrato nella figura a lato. (Per integrare per bene le applicazioni GTK+ in KDE si può consultare questa guida.) Per risolvere questo inconveniente bisogna fare clic sulla barra del titolo di Emacs e aprire AvanzateImpostazioni specifiche per applicazione.... Nella scheda Dimensioni e posizione impostare la voce Rispetta le restrizioni geometriche su Imponi e dopo di che premere Ok. In questo modo viene aggiunta semplicemente una striscia bianca per coprire la regione "scoperta", ma almeno viene eliminato il "fastidio" di vedere parte del desktop dietro una finestra che dovrebbe essere massimizzata.




L'impostazione precedente può essere creata "manualmente" andando in Impostazioni di sistemaRegole delle finestre e nella scheda Regole delle finestre creare una nuova regola facendo clic sul pulsante Nuovo... posto sulla destra. Nella finestra che si aprirà, scrivere una descrizione chiara nel campo omonimo della scheda Corrispondenza delle finestre (la descrizione che si ottiene con la procedura "automatica" descritta sopra è "Impostazioni dell'applicazione di emacs") e nel campo Classe di finestra selezionare Esattamente e aggiungere il valore emacs23 emacs (o l'eventuale numero di versione di Emacs utilizzata).

Ho trovato questo workaround qui: http://forum.kde.org/viewtopic.php?f=111&t=94122.

Attivare il blocco numeri all'avvio di KDE

All'avvio dell'ambiente desktop potrebbe succedere che il tasto blocco numeri (anche noto come blocco numerico o num lock) del tastierino numerico sia disattivato. Per accenderlo automaticamente andare in Impostazioni di sistemaDispositivi di immissione, scheda Tastiera e poi nella scheda Hardware selezionare Acceso nel campo Bloc Num all'avvio di KDE.

venerdì 28 settembre 2012

Gestire il touchpad in KDE

Per l'ambiente desktop KDE 4 esiste un programma per la gestione del touchpad dei computer portatili chiamato synaptiks. Tuttavia questo potrebbe non essere installato in maniera predefinita dalle varie distribuzioni, per esempio non mi sembra che Debian lo installi automaticamente. Per ottenerlo dai repository ufficiali di Debian e Ubuntu bisogna installare il pacchetto kde-config-touchpad. Da terminale si può dare il comando
sudo apt-get install kde-config-touchpad
Una volta installato sarà possibile gestire le impostazioni del touchpad da Impostazioni di sistemaDispositivi di immissione, scheda Touchpad, oppure nella sezione Accessori sotto la voce Touchpad management / synaptiks di un menu di avvio di applicazioni come Kickoff o Lancelot.





mercoledì 21 dicembre 2011

Integrare le applicazioni GTK+ in KDE

Le applicazioni scritte con il toolkit GTK+ (come praticamente tutte le applicazioni dell'ambiente desktop GNOME) non sono nativamente ben integrate nell'ambiente desktop KDE (che invece si basa sul toolkit Qt).

Il toolkit GTK+ permette di impostare un tema per tutte le applicazioni che lo utilizzano, quindi per migliorare l'aspetto di queste applicazioni all'interno di KDE abbiamo bisogno di un tema che assomigli il più possibile al tema in uso su KDE. Esistono diversi temi GTK+ che ben si integrano con le applicazioni Qt, come QtCurve, però in particolare segnalo l'esistenza del tema Oxygen-gtk che è una traduzione in GTK+ del tema predefinito di KDE, cioè Oxygen. Non è scopo di questa guida spiegare come si installano in generale i temi GTK+, vedremo solo come si installa Oxygen-gtk su Debian e sistemi derivati e come fare per utilizzarlo. Sugli altri sistemi operativi (Fedora, openSUSE, Gentoo, Arch Linux, eccetera) potranno cambiare i nomi dei pacchetti da installare e il gestore pacchetti da usare, ma le operazioni da eseguire saranno grosso modo le stesse.

È possibile installare Oxygen-gtk scaricandolo da qui e seguendo le istruzioni riportate nella pagina oppure, su Debian e derivate, installando il pacchetto gtk2-engines-oxygen tramite il gestore pacchetti Synaptic o sul terminale con il comando
sudo apt-get install gtk2-engines-oxygen
Ora dobbiamo solo impostare questo tema come quello utilizzato dalle applicazioni GTK+. Esiste una procedura manuale ben descritta in questa guida (in inglese) del wiki di Arch Linux, ma esiste anche una procedura automatica basata sull'utilizzo di un'apposita interfaccia grafica. Ci sono diversi semplici programmi che permettono di selezionare il tema GTK+ fra i quali gtk-chtheme e lxappearance, ma dal momento che stiamo parlando dell'ambiente desktop KDE suggerisco di utilizzare il selettore dei temi GTK che fa parte degli strumenti di sistema di KDE. Per installarlo su Debian e derivate bisogna installare il pacchetto kde-config-gtk-style con Synaptic oppure via terminale con il comando
sudo apt-get install kde-config-gtk-style
Si può adesso selezionare il tema in Impostazioni di sistema, scegliendo Aspetto delle applicazioni e impostando nella scheda Aspetto GTK lo stile oxygen-gtk.
Manca solo un'ultima operazione prima di finire. Scegliendo lo stile con il programma Impostazioni di sistema abbiamo creato un file nascosto il cui percorso è ~/.gtkrc-2.0-kde (ricordo che la tilde ~ è un'abbreviazione del percorso della home dell'utente corrente), ma per rendere efficace questa impostazione il file deve chiamarsi ~/.gtkrc-2.0 quindi dobbiamo rinominare il file ~/.gtkrc-2.0-kde in ~/.gtkrc-2.0, oppure copiare ~/.gtkrc-2.0-kde e incollarlo con il nuovo nome ~/.gtkrc-2.0 oppure creare un link simbolico ~/.gtkrc-2.0 che punta a ~/.gtkrc-2.0-kde. Per visualizzare i file nascosti in Dolphin bisogna premere la scorciatoia da tastiera ALT + . oppure queste operazioni possono essere eseguite da terminale rispettivamente con i seguenti comandi (basta eseguirne solo uno, quello che si preferisce!):
mv ~/.gtkrc-2.0-kde ~/.gtkrc-2.0 # per rinominare il file
cp ~/.gtkrc-2.0-kde ~/.gtkrc-2.0 # per copiare il file
ln -s ~/.gtkrc-2.0-kde ~/.gtkrc-2.0 # per creare il link simbolico
Adesso tutte le applicazioni GTK che verranno aperte risulteranno finalmente ben integrate con le applicazioni Qt di KDE.

Un'ultima osservazione: l'impostazione del tema GTK viene letta solo dai programmi eseguiti dall'utente nella cui cartella home si trova il file .gtkrc-2.0, ciò permette agli utenti di uno stesso sistema di usare diversi temi. Questo vale anche per l'utente "root", pertanto se si vuole che anche le applicazioni eseguite come utente "root" utilizzino il tema scelto bisogna inserire nella home dell'utente "root" il file .gtkrc-2.0. Per fare questo possiamo copiare il file nella home di "root" oppure creare all'interno di questa un link simbolico al nostro file .gtkrc-2.0 in modo che tutte le modifiche apportate al nostro file .gtkrc-2.0 valgano automaticamente anche per l'utente "root" senza dover modificare ulteriormente suoi file. Da terminale queste due operazioni possono essere eseguite con i comandi (di nuovo, va usato solo uno di questi comandi, quello che si preferisce)
sudo cp ~/.gtkrc-2.0 ~root/.gtkrc-2.0 # per copiare il file
sudo ln -s ~/.gtkrc-2.0 ~root/.gtkrc-2.0 # per creare il link simbolico



Aggiornamento: il tema Oxygen-gtk supporta anche la versione 3 del toolkit GTK+, nei repository di Debian e Ubuntu è presente il pacchetto gtk3-engines-oxygen. Per installarlo da terminale:
sudo apt-get install gtk3-engines-oxygen
La modalità di configurazione del tema per GTK3 però è diversa rispetto a quella per GTK2. Non mi risulta che esistano strumenti per selezionare automaticamente il tema, tuttavia bisogna solo creare un file chiamato settings.ini nella cartella ~/.config/gtk-3.0 (ricordo che la tilde ~ è un'abbreviazione per il percorso della home dell'utente corrente e che i file e cartelle i cui nomi iniziano con un punto non sono normalmente visibili, premere ALT + . in Dolphin per visualizzarli), cartella da creare se non già esistente. All'interno di questo file è sufficiente scrivere
[Settings] 
gtk-theme-name=oxygen-gtk
Dopo aver salvato il file le modifiche dovrebbero avere effetto immediatamente su tutte le applicazioni grafiche basate sul toolkit GTK3. Se si vuole fare tutto da terminale si possono dare i seguenti comandi
mkdir -p ~/.config/gtk-3.0
echo -e '[Settings]\ngtk-theme-name=oxygen-gtk' > ~/.config/gtk-3.0/settings.ini~/.config/gtk-3.0/settings.ini
Il primo comando crea la cartella se non esiste già, il secondo crea il file con il contenuto sopra indicato.

Anche i temi delle applicazioni GTK3 possono essere diversi da utente a utente. Come detto anche per le applicazioni GTK, possiamo automaticamente dare all'utente root le nostre stesse impostazioni eseguendo da terminale uno dei due seguenti comandi, a scelta
sudo cp ~/.gtkrc-3.0 ~root/.gtkrc-3.0 # per copiare il file
sudo ln -s ~/.gtkrc-3.0 ~root/.gtkrc-3.0 # per creare il link simbolico

giovedì 11 agosto 2011

Compilare moduli del kernel con DKMS

Il Dynamic Kernel Module Support (DKMS) è un sistema che permette di generare moduli per il kernel Linux i quali non sono presenti nel sorgente del kernel stesso. Quando viene installata una nuova versione del kernel Linux, normalmente è necessario ricompilare questi moduli. Nei sistemi Debian e derivati (e probabilmente anche in altre distribuzioni con kernel Linux), questa operazione viene svolta automaticamente eseguendo lo script /usr/lib/dkms/dkms_autoinstaller. A volte, però, si potrebbe voler ricompilare manualmente un modulo, oppure compilarlo per una versione del kernel diversa da quella per cui esiste già. La sintassi da usare per ricompilare un modulo chiamato <modulo> è la seguente
sudo dkms build -m <modulo> -v <versione_modulo> -k <versione_kernel>
sudo dkms install -m <modulo> -v <versione_modulo> -k <versione_kernel>
sudo dkms status
Il primo comando serve per compilare il modulo, nella versione <versione_modulo> e per il kernel <versione_kernel>, il secondo comando serve per installare il modulo compilato (prima di procedere con questo comando assicurarsi che la compilazione sia andata a buon fine. La buona riuscita o meno della compilazione viene segnalata dai messaggi di output del comando dkms build) e l'ultimo serve per verificare lo stato dei moduli gestiti da DKMS, per controllare che i moduli desiderati siano stati effettivamente installati. Per conoscere la versione del kernel attualmente in uso si può dare nel terminale il comando uname -r.

Quando si installa una nuova versione dei driver proprietari della scheda video (farò l'esempio con una scheda Nvidia), viene compilato solo il modulo per il kernel attualmente in uso (oltre ai kernel successivamente installati, come abbiamo già detto prima). Si potrebbe, però, voler compilare il modulo anche per una versione del kernel diversa da quella in uso (come può essere una versione precedente). Ammettiamo quindi per esempio che il modulo che si voglia ricompilare è il driver Nvidia, chiamato nvidia, che la sua versione è la 280.13 e che il kernel per il quale si vuole ricompilare il modulo è il 3.0.0-1-686-pae. Dunque dovremo dare i seguenti comandi per compilare e installare il modulo:
sudo dkms build -m nvidia -v 280.13 -k 3.0.0-1-686-pae
sudo dkms install -m nvidia -v 280.13 -k 3.0.0-1-686-pae
Alla fine potremo usare il comando dkms status per controllare lo stato dei moduli così installati. L'output sarà qualcosa di questo tipo
nvidia, 280.13, 2.6.38-2-686, i686: installed
nvidia, 280.13, 2.6.39-2-686-pae, i686: installed
nvidia, 280.13, 3.0.0-1-686-pae, i686: installed
Naturalmente consiglio di consultare il manuale di DKMS (man dkms) per avere maggiori informazioni sul programma e le sue opzioni.

Invece di usare dkms build e dkms install, è possibile utilizzare il comando dkms autoinstall che installa, per una specifica versione del kernel, tutti i moduli che sono già installati per altre versioni del kernel diverse da quella indicata. La sintassi è
sudo dkms autoinstall --kernelver <versione_kernel>
Si può anche eseguire direttamente lo script dkms_autoinstaller citato all'inizio (il breve script dkms_autoinstaller richiama a sua volta dkms autoinstall al suo interno). La sintassi è
/usr/lib/dkms/dkms_autoinstaller start
se si vogliono compilare i moduli per il kernel attualmente in uso oppure
/usr/lib/dkms/dkms_autoinstaller start <versione_kernel>
se si vuole indicare una particolare versione del kernel.

I comandi sopra spiegati sono validi solo se il modulo è già predisposto per la compilazione con DKMS. Per aggiungere il supporto a DKMS a dei moduli di cui si possiede il codice sorgente si può vedere qui.

I comandi di questo post sono stati presi dal seguente messaggio dell'utente bugsbunny sul forum forums.debian.net: http://forums.debian.net/viewtopic.php?f=6&t=66973#p382913.

domenica 26 giugno 2011

Conflitto fra i moduli delle schede audio

Sul mio vecchio muletto ho due schede audio, una integrata e una esterna. Questo è la parte dell'output del comando lspci -v che riguarda le mie due schede audio
00:02.7 Multimedia audio controller: Silicon Integrated Systems [SiS] AC'97 Sound Controller (rev a0)
        Subsystem: C-Media Electronics Inc CMI9739(A) on ECS K7SOM+ motherboard
        Flags: bus master, medium devsel, latency 64, IRQ 11
        I/O ports at d800 [size=256]
        I/O ports at d400 [size=64]
        Capabilities: <access denied>
        Kernel modules: snd-intel8x0

00:11.0 Multimedia audio controller: Creative Labs SB Live! EMU10k1 (rev 08)
        Subsystem: Creative Labs SBLive! 5.1 Model SB0100
        Flags: bus master, medium devsel, latency 64, IRQ 11
        I/O ports at d000 [size=32]
        Capabilities: <access denied>
        Kernel driver in use: EMU10K1_Audigy
        Kernel modules: snd-emu10k1
La scheda integrata è la prima (e segue lo standard AC'97), la seconda è la scheda esterna. Le casse audio sono collegate alla scheda esterna e su Windows (mi duole ammetterlo) l'audio funziona senza problemi, mentre su Ubuntu non sentivo nulla fino a qualche minuto fa (in realtà l'audio funzionava prima di aggiornare Ubuntu alla versione 9.10 Karmic Koala). Ho impiegato più di un anno e mezzo per capire quale fosse il problema ma l'importante è arrivarci (e da solo!): facevano conflitto i driver (o "moduli") delle due schede (anche se non so perché con le precedenti versioni di Ubuntu questo problema non si presentasse). I nomi dei moduli del kernel utilizzati dalle due schede possono essere letti nell'output del comando lspci -v: snd-intel8x0 per la scheda integrata (cioè quella che non uso) e snd-emu10k1 per la scheda esterna.

Per mettere in blacklist un modulo del kernel chiamato modulo bisogna mettere in un file con estensione .conf della cartella /etc/modprobe.d la riga
blacklist modulo
Dunque per far tornare magicamente l'audio sul mio computer ho dato il seguente comando da terminale
echo "blacklist snd_intel8x0" | sudo tee /etc/modprobe.d/blacklist-audio.conf
È possibile aggiungere un commento, per ricordarsi perché si è aggiunto un modulo alla blacklist, facendo iniziare le righe di commento con #. Per esempio ho modificato il file appena creato (con i diritti di amministratore perché si trova sotto /etc) aggiungendo il seguente commento
# Metto il modulo della scheda audio integrata nella blacklist per
# evitare che entri in conflitto con quello della scheda esterna
blacklist snd_intel8x0