Kommandot Ctrl-a a i screen

Ett mycket användbart kommando i gnu screen är Ctrl-a, a. Det kan användas för att gå tillbaka till början av en rad, men det är i själva verket mer generellt än så. Vad det gör är att det skickar kommandot Ctrl-a till fönstret inuti screen-sessionen. Det innebär att om du till exempel har nästade screen-sessioner, vilket kan hända om du öppnar en ssh-anslutning till en annan dator som startar screen automatiskt, så skickar man kommandon till den yttre sessionen med Ctrl-a och till den inre med Ctrl-a, a.

Som ett exempel så använder man Ctrl-a, d för att frånskilja den yttre sessionen. Den inre sessionen är dock fortfarande ansluten till denna. Det märker man om man återansluter till den. För att frånskilja den inre sessionen använder man istället kommandot Ctrl-a, a, d.

Observera också att kommandot Ctrl-a, a inte är samma kommando som Ctrl-a, Ctrl-a. Det senare används för att växla till det senast öppna fönstret.

Kombinera innehåll från olika celler i en cell i Libreoffice/OpenOffice calc

Det är väldigt  enkelt att bygga upp innehållet i en cell utifrån innehållet i andra celler. Detta görs genom att använda operatorn &.

Anta att man har följande tabell med förnamn och efternamn

För- och efternamn

För att kombinera dessa namn i en ny cell så anger man formeln

=A2 & " " & B2

enligt nedanstående bild

Skriv formel

och resultatet blir

table-3

Allt som skrivs inuti citationstecken i formeln kommer med ordagrant i resultatet. (I det här fallet ett mellanslag.)

Kopiera sedan formeln på vanligt vis till alla rader för att få slutresultatet:

table-4

Verifiera ssh host key

För att skydda mot man-in-the-middle-attacker använder sig ssh av ett system med värdnycklar (host keys). Det innebär att varje gång man ansluter till en ssh-server så identifierar sig servern med hjälp av en värdnyckel som jämförs med den nyckel som tidigare sparats på klienten (vanligtvis i filen ~/.ssh/known_hosts).

Om man aldrig tidigare anslutit till den aktuella servern, eller om man tagit bort värdnyckeln, så har man ingen nyckel att jämföra med. Man får då följande fråga:

The authenticity of host 'server.domain.tld (10.0.0.5)' can't be established.
ECDSA key fingerprint is a3:0a:fe:bd:70:7b:32:24:21:0b:c8:44:30:d0:bb:46.
Are you sure you want to continue connecting (yes/no)?

Innan man svarar ja på ovanstående fråga så bör man kontrollera så att fingeravtrycket stämmer för den aktuella servern. Detta görs på servern och i idealfallet av någon som har fysisk tillgång till den. Denna person kan sedan distribuera fingeravtrycken på lämpligt sätt. Om man inte kan få värddatorns fingeravtryck sänt till sig på något lämpligt sätt så kan man acceptera nyckeln temporärt för att kunna logga in på servern. Man genomför sedan nedanstående verifieringsprocess över ssh. Om fingeravtrycket stämmer så kan man vara hyfsat säker på ingen man-in-the-middle-attack förekommer.

Värdnycklarna finns på ett linux-system vanligtvis i katalogen /etc/ssh. För att ta fingeravtryck på nycklarna använder man sig av kommandot

$ssh-keygen -l -f SÖKVÄG_TILL_NYCKELN

För fingeravtrycket på ECDSA-nyckeln ovan blir kommandot

$ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub

För att generera fingeravtryck för värdens DSA- och RSA-nycklar ändrar man bara till motsvarande filnamn i kommandot ovan.

Förläng tonerlivslängden för din Brother HL-5370DW

HL-5370DWLaserskrivaren Brother HL-5370DW är överlag en trevlig skrivare. Den klarar dubbelsidig utskrift och man kan ansluta till den genom trådlöst nätverk.

En nackdel är att när den konstaterar att tonernivån är låg så vägrar den till slut att skriva ut fler sidor trots att det finns toner kvar i kassetten. Skrivaren mäter enligt uppgift tonernivån med en laser och sägs även ha någon typ av internt räkneverk för att stoppa utskrifter efter ett visst antal sidor.

För att få ut det lilla extra ur tonerkassetten så måste man få skrivaren att inse att det inte alls är slut på toner. Detta gör man genom att först preparera tonerkassetten på följande vis:

  1. Ta ut tonerkassetten ur trumenheten.
  2. Tejpa över de genomskinliga plastlocken på kassettens båda sidor med svart tejp. Det högra ser man lätt, det vänstra är svårare att få syn på men det sitter i linje med det högra.
  3. Sätt tillbaka tonerkassett och trumenhet i skrivaren.

Efter detta är det dags att köra toneråterställningssekvensen:

  1. Stäng av skrivaren och öppna den stora frontluckan (där man stoppar in toner och trumenhet).
  2. Håll in GO-knappen samtidigt som du slår på skrivaren.
  3. Alla lampor tänds nu. Fortsätt att hålla in GO-knappen tills statuslampan slocknar.
  4. Tryck nu två gånger på GO-knappen.
  5. Paper, drum och tonerlampan tänds nu.
  6. Tryck sex gånger på GO-knappen.
  7. Vänta tills statuslampan blir röd.
  8. Stäng frontluckan.

Nu är det bara att fortsätta skriva ut tills tonern tar slut på riktigt.

Att byta teckenkodning på filnamn

När man kopierar filer mellan olika system så behåller filnamnen sin ursprungliga teckenkodning. Om teckenkodningen skiljer sig åt mellan systemen så kan det innebära att filnamnen ser konstiga ut. Vissa program kan dessutom få problem med dessa filer när de upptäcker underliga tecken i dem.

Som ett exempel så kan vi ta filen mitt älsklingsrecept på köttbullesmörgås.txt. Om detta filnamn är skrivet i teckenkodningen ISO-8859-1 och systemet ät inställt på UTF-8 så visas filen något i stil med

mitt_�lsklingsrecept_p�_k�ttbullesm�rg�s.txt

Har man många filer blir det snabbt tröttsamt att ändra filnamnen manuellt. Som tur är så finns det ett verktyg som heter convmv som automatiserar namnbytet.

För att byta teckenkodning från ISO-8859-1 till UTF-8 på alla filer i en katalog så kan man först göra en provkörning via kommandot

convmv -f iso-8859-1 -t utf8 *

För köttbullesmörgåsen ovan blir resultatet av provkörningen

Starting a dry run without changes...
mv "./mitt_�lsklingsrecept_p�_k�ttbullesm�rg�s.txt"     "./mitt_älsklingsrecept_på_köttbullesmörgås.txt"
No changes to your files done. Use --notest to finally rename the files.

Programmet genererar då en lista med alla mv-kommandon som kan köras för att byta namn på filerna. Om allting ser bra ut så lägger man till flaggan --notest för att utföra namnbytet.

$ convmv -f iso-8859-1 -t utf8 * --notest
mv "./mitt_�lsklingsrecept_p�_k�ttbullesm�rg�s.txt"     "./mitt_älsklingsrecept_på_köttbullesmörgås.txt"
Ready!

Filnamnen är nu ändrade till korrekt teckenkodning.

Referenser

  1. http://www.faqforge.com/linux/convert-the-charset-of-file-names-from-iso-8859-15-to-utf8/

Verktyg för att manipulera pdf-filer i linux

Det finns ett antal olika verktyg för att manipulera pdf-filer i linux, både grafiska och sådana som används via terminalen. Jag kommer här att presentera några användbara terminalkommandon. För den som är intresserad av att manipulera pdf-filer via ett grafiskt gränssnitt så finns det en bra presentation av PDFModPåvels blogg.

Ghostscript

Ghostscript är ett mycket användbart program som kan användas för att dela eller slå ihop pdf-filer, klippa ut vissa sidor, rotera och skala om sidor med mera. En nackdel är att man måste ange många kommandoradsflaggsflaggor. Detta kan göra det svårt att komma ihåg från fall till fall. Man måste också tänka på att flaggorna är skiftlägeskänsliga.

För att spara en sidorna 18-22 i filen input.pdf till filen output.pdf anges följande kommando:
gs -sDEVICE=pdfwrite -dBATCH -dNOPAUSE -dFirstPage=18 -dLastPage=22 -sOutputFile=output.pdf input.pdf

Flaggan -sDEVICE=pdfwrite anger att man vill generera en pdf-fil. Flaggorna -dBATCH -dNOPAUSE gör att ghostscript kör det angivna kommandot utan avbrott för att sedan avsluta. -dFirstPage=18 -dLastPage=22 berättar för ghostscript att man vill att den skall behandla sidorna 18-22 i den fil man skickar till programmet. Slutligen så anger flaggan -sOutputFile=output.pdf namnet på den fil där resultatet skall sparas.

För att slå ihop två filerna input1.pdf och input2.pdf:
gs -sDEVICE=pdfwrite -dBATCH -dNOPAUSE -sOutputFile=output.pdf input1.pdf input2.pdf

Man kan också kombinera ovanstående exempel. Följande kommando sparar sidorna 1-2 i input1.pdf och sidorna 3 och framåt i input2.pdf till filen output.pdf:
gs -sDEVICE=pdfwrite -dBATCH -dNOPAUSE -sOutputFile=output.pdf -dFirstPage=2 -dLastPage=3 MM4001-2.pdf -dFirstPage=3 input2.pdf

Notera här att flaggorna -dFirstPage och -dLastPage verkar på den fil som anges närmast efter dessa flaggor.

Konvertera en pdf-fil till bilder

Konvertering av en pdf-fil till bilder kan göras på lite olika sätt beroende på vad man vill uppnå.

Convert

Convert är ett program som ingår i programsviten ImageMagick som ingår som standard i de flesta linuxdistributioner. Det används för att konvertera allt innehåll på sidorna i en pdf-fil till bilder. I sin enklaste form anger man kommandot
convert infil.pdf utfil.jpg
Ovanstående kommando genererar en jpg-fil per sida med filnamnen utfil-1.jpg, utfil-2.jpg etc.

En nackdel med ovanstående kommando är att kvaliteten på främst text, och vektorgrafik kan bli lidande. Detta beror på att convert använder en upplösning på 72dpi som standard. Detta kan åtgärdas genom att att ange flaggan -density till convert. Om man ändrar ovanstående kommando till
convert -density 300 infil.pdf utfil.jpg
så får man bilder med högre upplösning.

Pdfimages

Om man istället för att konvertera hela pdf-filen till bilder är ute efter att extrahera bitmapsbilder från pdf-filen så kan man använda programmet pdfimages. I Ubuntu ingår det i paketet poppler-utils. Programmet letar igenom pdf-filen efter bitmapsbilder och extraherar dessa i originalstorlek.
pdfimages -j foo.pdf bar
ger bilderna bar-000.jpg bar-001.jpg etc. (Flaggan -j anger att bilderna skall sparas som jpeg.)

Vektorgrafik

Om man behöver extrahera vektorgrafik ur ett pdf-dokument är det lättaste alternativet att använda programmet Inkscape. Det finns verktyg som kan konvertera pdf-filen till andra vektorformat men för att extrahera önskad grafik så brukar man behöva Inkscape i slutändan ändå. En guide till hur man använder Inscape för detta ändamål finns på Imperfect notes.

Starta screen automatiskt vid inloggning över ssh

Screen är ett program som snabbt blir oumbärligt när man väl börjat använda det. Det är extra användbart när man arbetar över en ssh-anslutning. Ett sätt att automatiskt starta screen och ansluta till senaste frånskilda screen-session när man loggar in via ssh är att lägga till följande kod i din ~/.bash_profile.

if [ $SSH_TTY ] && [ ! $WINDOW ]; then
  SCREENLIST=`screen -ls | grep 'Attached'`
  if [ $? -eq "0" ]; then
    echo -e "Screen is already running and attached:\n ${SCREENLIST}"
  else
    screen -U -R
  fi
fi

Koden är hämtad från http://tlug.dnho.net/node/239.

Denna kodsnutt letar efter frånskilda screen-sessioner och ansluter automatiskt till den första den hittar. Om det bara finns anslutna sessioner så startas ingen ny session. Istället visas de sessioner som finns i en lista. Om det inte finns någon session alls så startas en ny.