Byta plats på Escape och Caps Lock

cPS LOCK ÄR EN FÖRBnnat störig tangent innan man lär sig låta bli den. Lyckligtvis går den att flytta på, utan att man för den sakens skull ska behöva pilla med själva tangentbordet.

Ett sätt att göra detta i X11 beskrev jag för ett drygt år sedan. Metoden fungerar dock inte längre, åtminstone inte i OpenBSD 5.2-current, så här kommer en uppdatering.

Utanför X11

All sin tid vid tangentbordet spenderar man ju inte i X11. I OpenBSD är det wscons (4) som mappar tangenter för konsolen, och därför är det wsconsctl.conf (5) som ska redigeras.

De här två raderna bakar kakan:

keyboard.map+="keycode 1 = Caps_Lock"
keyboard.map+="keycode 58 = Escape"

När det receptet är på plats i /etc/wsconsctl.conf växlas tangenterna från och med nästa uppstart. Kan du inte hålla dig till dess så ska du omedelbart mata wsconsctl (8) med samma rader:

$ wsconsctl keyboard.map+="keycode 1 = Caps_Lock"
$ wsconsctl keyboard.map+="keycode 58 = Escape"

Vill du göra samma sak i Linux, då får du vända dig till en sökmotor, till något lämpligt forum eller RTFM (om det finns någon). Gissningsvis körs tangentbordsmappningen någonstans i uppstartsprocessen, t.ex. /etc/init.d eller motsvarande, så din upptäcktsresa kan börja där.

Inuti X11

Ovanstående är dock till föga glädje när X11 väl startar. X11 mappar nämligen om tangentbordet vid uppstart. Till råga på allt känner OpenBSD:s X11 inte längre igen tangentbordet som ett svenskt sådant om ovanstående inställningar är gjorda, vilket innebär att man påtvingas ett engelskt tangentbord. (Egentligen är det wscons som rapporterar mappningen som "user" i stället för "sv" så snart den förändras.)

Ett steg framåt men två tillbaka.

Nå, vi ordnar först så att det svenska tangetbordet kommer tillbaka, genom att placera följande rad i ~/.xinitrc, förslagsvis mycket tidigt, men inte först, i filen:

/usr/X11R6/bin/setxkbmap se

Kör även kommandot i ett terminalfönster för att slippa starta om X11.

Nu har vi vårt svenska tangentbord tillbaka, men förtretligt nog sitter Escape och Caps lock precis där de brukar igen – X11 gör ju som sagt sin egen tangentbordsmappning. För att lägga oss i denna använder vi xmodmap (1).

Processen är enkel:

$ xmodmap -e 'clear Lock'
$ xmodmap -e 'keysym Escape = Caps_Lock'
$ xmodmap -e 'keycode 0x42 = Escape'

Nu vill man förstås inte gärna göra det där varje gång man startat X11, så vi permanentar inställningarna genom att lägga dem i filen ~/.Xmodmap, som vi sedan kör från ~/.xinitrc.

Eventuellt har du redan någon slags anordning i din ~/.xinitrc som använder .Xmodmap, .xmodmap eller i värsta fall någon helt annan fil. Kolla först detta, och utgå sedan från vad du redan har, om du har något.

Filen ~/.Xmodmap (eller motsvarande) ska innehålla följande:

I ~/.xinitrc ser det i stället ut så här:

Tänk på att tjo-pangen (dvs "#!/bin/sh") ska vara först i filen. Sedan har man förstås mycket mer i en vettig ~/.xinitrc, men om det ska jag skriva först i ett senare inlägg.

Om du inte hade någon ~/.xinitrc är det lämpligt att du skaffar en innan du ändrar i den. Det kan du göra genom att kopiera /etc/X11/xinit/xinitrc eller motsvarande till ~/.xinitrc.

Det var det hela. Nu har du Escape i samma kvarter som vänster lillfinger, och behöver knappt lyfta det för att stänga dialogrutor, avbryta sidladdningar eller använda en vettig texteditor. Gött!

(För säkerhets skull upprepar jag även tipset från mitt tidigare inlägg: I Windows kan man göra samma tangentbyte med SharpKeys.)

Hur min ThinkPad slutade pipa varje grep

»I would rather run Windows than use vi.«"
Theo de Raadt

När jag skaffade ny Thinkpad för något år sedan hade jag läst fel i en hårdvarispec och kunde plötsligt inte köra X.org i OpenBSD, annat än i ett anskrämligt och alldeles för randigt VESA-läge. Sålunda har jag tvingats leva i exil och köra Windows. (Vilket med tanke på mitt val av texteditor ter sig en smula ironiskt i skenet av vem Theo är.)

Det problemet har jag vare sig försökt eller lyckats åtgärda på ett tag, men däremot har jag äntligen lyckats bli av med vad som gränsar på världshistoriens mest bisarra bugg, och då är det ändå Windows vi talar om.

Buggen ter sig så här: Ett godtyckligt antal timmar efter att Windows startat så börjar högtalarna tjuta när jag skriver vissa bokstäver i följd, till exempel kombinationen "gre". Eftersom jag sedan kommer från unix-miljö och har grep i ryggmärgen har detta varit ett år av ilsket pipande i mitt vardagsrum.

Hur har jag inte frågat mig: Vad för slags fullständigt urbota person finner egentligen funktionen pip alltid när jag skriver gre vara en fantastisk idé? Och hur, o, hur har jag inte letat efter orsaken? Timmar! Jag har googlat mig blå, stängt av program för program tills Windows säckat ihop och letat i varenda inställning jag hittat, men helt utan resultat.

Tills i dag. Med något helt annat i hågen råkade jag plötsligt snubbla över ett gammalt blogginlägg där orsak och lösning presenterades.

Orsaken heter Beep. Beep är en drivrutin vars egentliga syfte och funktion är oklara, mer än vad som kan utläsas av hennes namn. Allt vi vet om Beep är att hon lever för att pipa, i synnerhet när jag letar efter något.

I ett svenskt Windows 7 sätter man som följer punkt för Beeps otyg.

  1. Starta om datorn.
  2. Tryck på Windows-tangenten eller före detta Startmeny-knappen.
  3. Skriv "Enhetshanteraren" i sökrutan och tryck retur.
  4. Välj menyalternativet Visa->Visa dolda enheter.
  5. Utvidga Drivrutiner som inte är av Plug and Play-typ.
  6. Dubbelklicka på den lockande drivrutinen Beep.
  7. Välj fliken Drivrutin.
  8. Bort med skiten! Med andra ord: Välj Inaktiverad som typ av autostart.
  9. Starta om datorn.

Den första omstarten är nödvändig eftersom Beep tycks trilskas om Windows varit igång för länge. Den sista omstarten krävs (förmodligen) för att Beep inte ska hänga kvar ens till nästa omstart – och rekommenderas om du vill undvika känslan när du nyss fått stopp på ett års plågeri bara för att drabbas av det ännu en sista gång.

Märk dock, att om du rakt av stoppar Beep, då hamnar du bara i sorgligheter. Beep kommer vägra stoppa, sluta svara och sedan förhindra en ren omstart.

WinSxS: Frigör diskutrymme och reparera systemfiler i Windows 7

Som bekant för er som följt bloggen sedan i våras har jag kastats ut i exil. OpenBSD har inget stöd för grafikkortet i den dator jag ersatte min förra med, så jag har tvingats leva med Windows 7 i några månader. Det i sig är inget att klaga över, och har gett en del nya erfarenheter.

En erfarenhet jag dock kunde ha klarat mig utan är denna: Med Windows är jag tvungen att lägga mer tid på underhåll än tidigare, och nästan allt underhåll handlar enbart om att datorn ska fungera likadant som förra veckan. Windows efterlever inte principen att om jag inte gör något med datorn så förändras den inte.

Mest irriterande av allt är nog mappen WinSxS, som obevekligen växer. För varje uppdatering, installation och avinstallation växer den. Ta bort den får man inte göra, eftersom det är något slags backup som även används hela tiden. Just nu är min WinSxS-mapp 11,5GB. Den är följaktligen 11,5GB större än när jag installerade om Windows 7 för ett halvår sedan. Inom ytterligare ett år kommer den förmodligen vara så stor att partitionen inte längre räcker till.

Banta storleken på WinSxS

Men det går att minska omfånget på den litet! Detta sker till priset av att man inte kan ångra vissa installationer, uppgraderingar och dylikt. Om du inte tänker nedgradera kan du alltså göra så här:

  1. Öppna Start-menyn.
  2. Skriv "PowerShell".
  3. Tryck Ctrl+Shift+Retur för att starta PowerShell som administratör.
  4. Mata in följande trollformel:

    dism /online /cleanup-image /spsuperseded

Resultatet? På min maskin gick WinSxS från 11,5GB till 7,2GB. Inte så tokigt. Så här såg utmatningen ut:

PS C:\Windows\system32> dism /online /cleanup-image /spsuperseded

DISM-verktyget (Deployment Image Servicing and Management)
Version: 6.1.7600.16385

Avbildningsversion: 6.1.7600.16385

Säkerhetskopior som skapades under Service Pack-installationen tas bort.
Paketet Microsoft-Windows-UltimateEdition~31bf3856ad364e35~amd64~~6.1.7600.16385 tas bort
[==========================100.0%==========================]
Service Pack-rensningsåtgärden har slutförts.
Åtgärden har slutförts.

Reparera skadade systemfiler

Om din Windows-installation plötsligt beter sig märkligt kan det bero på att någon fil blivit skadad. Det finns faktiskt ett program som går igenom alla systemfiler och kollar om de är som de ska. Hittas någon skadad fil så ersätts den av en korrekt kopia – ur mappen WinSxS! Något ska den väl vara bra till också. :-)

Gör så här för att skanna igenom systemet och rätta till alla eventuella dumheter:

  1. Öppna Start-menyn.
  2. Skriv "PowerShell".
  3. Tryck Ctrl+Shift+Retur för att starta PowerShell som administratör.
  4. Mata in följande trollformel:

    sfc /scannow

Det var det hela.

Byta plats på Esc och Caps lock

Uppdatering 24 augusti 2012
En förbättrad version av det här inlägget finns att läsa här.

* * *

cPS LOCK ÄR EN FÖRBnnat störig tangent innan man lär sig låta bli den. Lyckligtvis går den att flytta på, utan att man för den sakens skull ska behöva pilla med själva tangentbordet.

Eftersom jag dessutom helst använder vi till texteditor (eller mera precist nvi), så vill jag ha Esc nära till hands. I kombination med att jag använder styrknopp istället för touchpad eller mus, så behöver jag nästan bara flytta på händerna när det kliar.

För att byta plats på Esc och Caps lock i X11 kör du följande kommandon i skalet:

$ touch ~/.Xmodmap
$ echo "remove Lock = Caps_Lock\nkeysym Escape = Caps_Lock\nkeysym Caps_Lock = Escape\nadd Lock = Caps_Lock">>~/.Xmodmap

Ovanstående skapar eller utökar i själva verket filen .Xmodmap med följande innehåll:

remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add Lock = Caps_Lock

Inställningarna börjar gälla när du startat om X11, eller kört följande kommando:

$ xmodmap ~/.Xmodmap

I Windows 2000 eller senare kan du flytta tangenter med programmet SharpKeys.