Byta plats på Esc 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.
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.
Dela upp filer med split
Någonsin haft problem att föra över stora filer? Det har jag. När överföringen närmar sig ungefär 4,294,967,296 byte så tar det plötsligt stopp. Ingenting hjälper.
Jag orkade inte reda ut om det var FileZilla (på måldatorn, som kör Windows) eller sshd (på källdatorn, som kör OpenBSD) som bråkade. I stället kommer verktygslådan fram. Problemet är nämligen kvickt avhjälpt med ett par gamla unix-verktyg.
På källdatorn, gör:
$ split -b2000m stor-fil.zip stor-fil.zip.
Du kommer få flera filer, 2G stora, som heter stor-fil.zip.xaa, stor-fil.zip.xab, stor-fil.zip.xac och så vidare. För över dem.
På måldatorn är det sedan bara att klistra ihop dem igen (vilket givetvis sker i Cygwin):
$ cat stor-fil.zip.x* > stor-fil.zip
split och cat duger inte bara till stora, binära filer. Med split kan du ange ett regular expression att dela filen vid, och alltså även dela upp textfiler på olika listiga sätt, om du vill.
Ett annat sätt att flytta enorma filer, trots sådana här uppenbara 32 bit-goofar, är med en vanlig pipe. Från källdatorn:
$ cat stor-fil.zip | ssh <måldator> "cat > stor-fil.zip"
Men det är ju inte lika kul.
Ladda hem från Youtube
Tidigare har jag berättat hur man kan ladda hem från SVTPlay, och nu är det dags för Youtube. Jag tänker även berätta hur du kan göra för att konvertera en video till en ljudfil, genom att helt sonika lyfta över det i en egen fil.
Precis som tidigare, så är anledningen till att jag själv gör så här att jag kör ett 64-bitars OpenBSD, och då går det inte att använda Flash. Youtube kommer framöver att gå över till HTML5, och då slipper jag det här krånglet. Du kan pröva deras testversion detta här.
Det absolut enklaste sättet att tanka hem Youtube-videor är att använda sajten KeepVid.com. Det gör du så här:
- Gå till videon på Youtube.
- Kopiera adressen ur adressfältet.
- Klistra in adressen på KeepVid.com och klicka på Download-knappen.
- Högerklicka på länken som visas och välj Spara som…
Men detta fungerar inte felfritt! Dessutom är det skönt att kunna genomföra samma grej från ett terminalfönster eller i ett script, åtminstone för mig. Nu kommer jag först att berätta hur du laddar hem en video på det viset, och sedan hur man kan göra för att automatisera litet grand.
Ladda hem videon
Du behöver programmet youtube-dl, som i själva verket är ett Python-script. Se alltså till att ha Python installerat.
Windowsbrukare kan också använda det, och lätt övermäktiga instruktioner för hur scriptet kan installeras finns här.
På *nix-system måste youtube-dl.py dessutom vara körbar. Eftersom det är bra att hålla ordning på sin hemkatalog, så lägger vi scriptet i mappen ~/bin.
$ chmod +x youtube-dl.py
$ mkdir ~/bin
$ mv youtube-dl.py ~/bin/
Nu kollar vi att den går att köra:
$ youtube-dl.py
ksh: youtube-dl.py: not found
Hoppsan! Händer detta mumlar du följande trollformel, så är problemet omedelbart löst på obestämt tid.
$ echo 'export PATH=$PATH:$HOME/bin' >> .profile; export PATH=$PATH:$HOME/bin
Du kan även få permission denied när du kör filen. Lösningen är att köra scriptet så här istället:
$ python ~/bin/youtube-dl.py
Resten är lätt. Surfa till Youtube-sidan med videon, kopiera adressen, och kör scriptet med den enligt följande:
$ youtube-dl.py -bt "http://www.youtube.com/watch?v=yek2D4Kjwgc"
Glöm inte citat-tecknen! Eller snarare: Om du inte vet när de egentligen behövs, så använd dem alltid. (Just här behövs de egentligen inte.)
Youtube på volley
Har man inte Flash kan man inte se videon i webbläsaren. Om man bara vill slå en flukt på videon men inte tanka hem den, är det omständigt att behöva ladda hem den först.
Då kan man använda sig av samma lösning för nedladdning som ovan, men fånga videon »i luften« och spela upp den direkt istället! Så här skapar du ett script som fixar biffen:
$ cat << slut=""> ~/bin/youtube.sh
#!/bin/sh
PLAYER="mplayer"
YOUTUBE_DL="python ~/bin/youtube-dl.py"
for file; do $PLAYER $($YOUTUBE_DL -bg $file); done
SLUT
$ chmod +x ~/bin/youtube.sh
Ersätt "mplayer" med kommandot för den mediaspelare du föredrar.
Nu kan du spela upp videor direkt, busenkelt:
$ youtube.sh http://www.youtube.com/watch?v=yek2D4Kjwgc
Scriptet kan spela upp flera videor på rad om du klistrar in adresserna efter varandra.
Hur du plockar loss ljudet
Först och främst ska du se till att du har FFmpeg installerat.
Sedan måste du bestämma om du vill ha en mp3-fil eller en m4a-fil. Vill du ha ljudet i mp3-format, börja med att tanka hem videon så här:
$ youtube-dl.py -o dummy.flv http://www.youtube.com/watch?v=yek2D4Kjwgc
När nedladdningen är färdig så plockar du loss ljudspåret enligt det följande:
$ ffmpeg -vn -acodec copy -i dummy.flv ljudfil.mp3
Strax har du en fil som heter ljudfil.mp3.
Vill du istället ha ljudet i m4a-format, får du ändra parametrarna något.
$ youtube-dl.py -bo dummy.mp4 http://www.youtube.com/watch?v=yek2D4Kjwgc
$ ffmpeg -vn -acodec copy -i dummy.mp4 ljudfil.m4a
Och det var faktiskt det hela.
Att köra Firefox på eget konto
Som webbparanoid står man inför ständiga faror. Tänk om min webbläsare har något farligt säkerhetshål, som någon otrevlig webbsida jag råkar besöka får för sig att utnyttja för att ladda upp alla mina filer, eller än värre ta bort dem helt?
Problemet går givetvis att lösa på flera sätt, och lika givet är att ingen lösning är fullkomlig. Den jag tänker lägga fram här torde fungera som försvar mot de flesta »opersonliga« attacker man kan råka ut för. Om någon däremot faktiskt är ute efter dig så har du nog ingen glädje av det.
Vad vi kommer att göra är att ordna så att Firefox (och faktiskt vilka program du vill) kan köras utan rättigheter till din home-katalog. Simpelt som en plätt.
The following takes place in a unix-like environment. Du måste ha sudo och XTerm installerat.
Skulle sudo bråka med dig, se avsnittet längre ned om sudo.
- Skapa en ny användare på ditt system, och döp den till något smart. Låt oss kalla den
_web. Ge den en egen home-katalog som heter/home/web. - Spärra all tillgång till din egen home-katalog för andra användare än du själv:
$ chmod og-rwx $HOME
- Kontrollera att användaren
_webberövats sådan tillgång:Sedan kan du ta bort testfilen:$ echo "Den här textfilen får du inte läsa." > ~/kontrollfil.txt
$ sudo -u _web cat ~/kontrollfil.txt
Password:
cat: /home/jesper/kontrollfil.txt: Permission deniedOm inget permission blev denied så har du ett konstigt filsystem. Lämna en kommentar!$ rm ~/kontrollfil.txt
- Kopiera din webbläsares inställningskatalog till den nya användaren. Använder du Firefox heter den
.mozillaoch kör du Opera är det.opera. Kopiera katalogen såhär:Och liknande för Opera:$ sudo cp -r $HOME/.mozilla /home/web/
$ sudo chown -R _web._web /home/web/.mozillaEn del andra webbläsare sparar sina inställningar i en katalog inuti katalogen$ sudo cp -r $HOME/.opera /home/web/
$ sudo chown -R _web._web /home/web/.opera.config, däribland Midori. För att kopiera en sådan katalog måste du gå litet annorlunda tillväga.$ sudo -u _web mkdir /home/web/.config
$ sudo cp -r $HOME/.config/midori /home/web/.config
$ sudo chown -R _web._web /home/web/.config - Med ett par enkla trollformler kan du nu köra igång din webbläsare under en annan användare, men med samma inställningar som dem du kopierade från ditt vanliga konto. Men trollformler är inte roliga att komma ihåg, så vi automatiserar det hela med ett skalskript. I exemplet lägger vi det i filen
$HOME/bin/webuser.sh, och detta är vad den skall innehålla:(Eventuellt klagar någon insatt läsare på att $HOME-variabeln får samma värde flera gånger om. Men det verkar faktiskt krävas i vissa sammanhang, och jag är osäker på varför.)#!/bin/sh
if [ X$1 == X ]; then exit; else app=$(which $1); fi
xhost localhost && cd /home/web/ && \
sudo -H -u _web env HOME=/home/web $app --display localhost:0.0& - Sista stegets utförande lämnar jag som en övning åt läsaren. Det som måste skapas är en ikon, ett menyalternativ eller något annat fiffigt, som vid aktivering gör bruk av den smått makalösa trollformeln ovan:Det sista ordet ska givetvis inte vara »WEBBLÄSARE«, utan det kommando som din webbläsare startas med. Till exempel
xterm -geometry 20x1 -e 'sudo sh $HOME/bin/webuser.sh WEBBLÄSARE'
firefox. Om du får välja mellan att köra kommandot i ett terminalfönster eller inte, så kan du välja att låta bli.
Vad kommer hända när du dubbelklickar på den där ikonen? Jo, en pytteliten ruta dyker upp på skärmen som frågar efter lösenord. Det är sudo som frågar, och i sina flesta inkarnationer är det lösenordet till ens eget konto det ber om. Vanligtvis frågar sudo inte heller efter lösenordet oftare än kanske var tionde eller tjugonde minut. Programmet kommer nämligen ihåg lösenordet åt dig en stund efter att du matat in det.
Om sudo bråkar!
Om sudo inte vill låta dig hålla på med sådant precis hur som helst, så kan du lägga till följande rad i slutet av filen /etc/sudoers – men akta dig! Om du råkar göra den filen ogiltig kan du bli utelåst från ditt eget system!
user ALL=(ALL) SETENV: ALL
Första ordet ska förstås inte vara user, utan ditt eget användarnamn på din burk. Detta är viktigt! Gör du fel, som sagt, så får du rejäla problem, och kommer sitta och svära över att du aldrig lärt dig ed, en texteditor anpassad för en tid då man hade skrivare istället för datorskärmar. (Jag skojar inte.)
Ett sätt att undvika sådana missöden är att försöka redigera filen med följande kommando:
$ sudo env EDITOR=gedit visudo
Ersätt gedit med den texteditor du gillar att använda. När du ändrat färdigt i filen och sparar och stänger, så kommer visudo kontrollera att filen är riktig. Har du gjort något tokigt kommer den ge dig en chans att reparera skadan innan det är för sent.
Och till sist, om du inte gillar att sudo kommer ihåg dina lösenord, lägg till följande rad långt upp i /etc/sudoers, bland de andra Defaults-raderna, om du har några.
Defaults timestamp_timeout =0
Det var allt!