Sat, 15 Jul 2017

Setting up windows

Keywords: Windows setup

I needed to set up a new Windows 10 box. In case I need to do it again, I'm making a few notes.



- in chocolatey:
  - 7zip
  - autohotkey
  - clementine
  - Firefox
  - GoogleChrome
  - jdownloader
  - logitechgaming
  - Revo.Uninstaller
  - vim
  - virtualbox
  - VirtualBox.ExtensionPack
  - windirstat

- to swap cpas lock and escape
  - download Interception:
  - as administrator, run install-interception /install
  - add a shortcut to caps2esc.exe to the startup directory
    - Windows-R / shell:startup / add link

[/software/windows] permanent link

Sat, 22 Oct 2016

Swapping caps lock and esc keys

Keywords: Windows capslock escape control caps2esc

On almost all modern keybaords the useless capslock key is right where something useful should be. Initially the control key would have been there. On some keyboards the escape key was there and this influenced the design of vi.

The escape key and the control key can actually be combined such that if you press the key on its own then you get an escape, and if you press it with something else you get the control key. Then you need to put this key where the capslock key is now and move the capslock to the escapse key.

On Windows the Interception library can be used to do this. The steps for Windows 7 are:

- Download and install the Windows Driver Kit from
- Set WDK to C:/WinDDK/7600.16385.1 (or wherever it was installed)
- git clone
- run buildit.cmd in the library directory
- run buildit.cmd in the samples/caps2esc directory
- copy caps2esc/objfre_wxp_x86/i386/caps2esc.exe and library/objfre_wxp_x86/i386/interception.dll into a new directory (I use C:/caps2esc)
- add a shortcut to c:/caps2esc/caps2esc.exe to the startup directory

For linux use caps2esc, but this won't work well inside a VM.

I suppose you could download the version I compiled for Windows 7. I have no idea whether it will work for anything else, amd you will need to make sure you are within the licence.

For Windows 10 tihngs are somewhat simpler:

- download Interception:
- as administrator, run install-interception /install
- add a shortcut to caps2esc.exe to the startup directory
  - Windows-R / shell:startup / add link

[/software/windows] permanent link

Sat, 27 Jul 2013

Installing rvm

Keywords: rvm ruby 1.9.3 tmuxinator zsh

In order to upgrade tmuxinator I needed to run Ruby 1.9.3. So I installed rvm as follows:

$ bash -s stable < <(curl -s

and added the following to my .zshrc:

if [[ -e ~/.rvm/scripts/rvm ]] then
    . ~/.rvm/scripts/rvm
    .  ~/.rvm/gems/ruby-1.9.3-p448/gems/tmuxinator-0.6.2/completion/tmuxinator.zsh


$ rvm install 1.9.3
$ rvm use 1.9.3 --default
$ gem install tmuxinator

I also had up change my tmuxinator config files:

$ cd ~/.tmuxinator
$ perl -pi.bak -e 's/cli_args/tmux_options/' *.yml
$ perl -pi.bak -e 's/tabs/windows/' *.yml
$ perl -pi.bak -e 's/^project_//' *.yml
$ perl -pi.bak -e 's/-2$/-l -2/' *.yml

The last change there is because with just the "-2" in tmux_options I got the error:

in `tmux_options': undefined method `strip' for -2:Fixnum (NoMethodError)

[/software/ruby] permanent link

Fri, 28 Oct 2011

Shrinking disks in VirtualBox

Keywords: Virtualbox shrink disk size minimise

Update - 19.07.2014

This is actually a little easier now. Or I know better, perhaps.

Again, there should be no snapshots.

1. On the VM install zerofree:

# aptitude install zerofree

2. Boot into single user mode.

3. Run zero free on each virtual disk:

# zerofree /dev/sda1
# zerofree /dev/sdb1

4. Power down the VM

(On a Windows guest, for steps 1-4 just download and run sdelete -z)

5. On Windows, compact each virtual disk:

> "c:\Program Files\Oracle\VirtualBox\VBoxManage" modifyhd root.vdi --compact

And you're done.

If you've been using VirtualBox for a while with dynamically allocated disks, you've probably found that the size of the virtual disk exceeds that of the data stored therein. Sometimes by quite some ammount. Once used, the disk space is never returned.

I recently bought an SSD and wanted to put one of my Ubuntu virtual machines on it, that being where I do most of my work. However, the three virtual disks being used by that VM had grown quite large - too large to store on my SSD. There were also snapshots in use, despite the VM apparently not using any. This, I suspect, may have been due to mounting a virtual disk from another VM which had snapshots. Or it might not. In any case, things were a little bit of a mess and I wanted to sort them out too.

The first thing I did was to clear out as much of the disks as I could that was just being used for storage. Then we get to the complicated part of trying to reduce their size. I have seen suggestions to use zerofree or resize2fs but it wasn't clear to me whether they worked with ext4. So here is the method I used.

1. Using VirtualBox 4.1.x, clone the VM. This removes all the problems with the snapshots and makes a single definitive copy of all the virtual disks. If you have more than one virtual disk, you could remove those disks beforehand, since copies of those disks are not actually required, though a copy of the disk containing the root filesystem is required.

2. Create new, empty virtual disks for each of your original disks.

3. Add these new empty disks to your VM, along with at least the copy of the root filesystem.

4. Start your VM, run fdisk and mkfs.ext4 or mkswap to create the filesystems.

5. Create mountpoints and mount your new and cloned disks.

6. For all filesystems except the root filesystem, run cp -a to populate the new disk either from the clone, if you made one, or just from wherever they are mounted on the VM.

7. For the root filesystem do the same, but this must be done from the clone.

8. Assume your new root filesystem is mounted as /mnt/root. Run:

# mount -o bind /proc /mnt/root/proc
# mount -o bind /dev /mnt/root/dev
# mount -o bind /dev/pts /mnt/root/dev/pts
# mount -o bind /sys /mnt/root/sys

Edit /etc/fstab to reflect your new disk layout. If possible, it might be easier if you just mount the root filesytem at first and don't use the UUID format.

# chroot /mnt/root
# grub-install --root-directory=/ /dev/hda

Replace hda with whichever device you are booting from.

# update-grub
# exit

9. Create a new virtual machine, use your cloned one, or reuse your old one. Attach the appropriate disks and start the VM. If you are lucky, grub will be set up and the VM will boot.

10. Find out the UUIDs of your partitions by running blkid. Edit /etc/fstab appropriately and reboot.

11. Copy averything to where you want it to be. (My SSD.)

And that's all there is too it!

[/software/virtualbox] permanent link

Mon, 18 Oct 2010

Ubuntu 10.10 crashes running under VirtualBox 3.2.10.

Keywords: Virtualbox Ubuntu 10.10 crashes timer noapictimer nohz=off highres=off grub

I recently bought myself a new laptop. It's a rather nice HP Envy 14. Unfortunately no linux distribution properly supports it yet and so I run a Ubuntu guest virtual machine on it under VirtualBox with Windows 7 as the host.

Recently the VM started crashing. It would stop accepting keyboard input, and wouldn't shut itself down nicely using the mouse either from within Ubuntu or from VirtualBox. The only solution was to get VirtualBox to poweroff the VM. I upgraded Ubuntu to 10.10 and VirtualBox to 3.2.10, hoping to fix the problem, but it didn't help.

What did help though, was adding the following startup options:

noapictimer nohz=off highres=off

These can be added to the GRUB_CMDLINE_LINUX_DEFAULT line in /etc/default/grub, then run update-grub and the problem seems to be fixed.

Although sound under a VM isn't really the best idea, I just can't find any music players that I like which run under windows, and so I use Amarok 1.4. (No, I don't like Amarok 2.) Previously I was getting more frequent crashes whilst playing music. With this fix I've not had any crashes, even when playing flac files. Looking at the solution, this makes sense.

[/software/virtualbox] permanent link

Sun, 10 Oct 2010

Installing VirtualBox guest additions on a Ubuntu 10.10 guest

Keywords: Virtualbox Ubuntu 10.10 X server guest additions

Adding VirtualBox guest additions to a Ubuntu 10.10 guest fails for the X server, since 10.10 includes a later version than the guest additions are expecting.

The solution:

$ sudo aptitude install virtualbox-ose-guest-x11

[/software/virtualbox] permanent link

Sat, 09 Oct 2010

Updating the copyright on gallery2

Keywords: copyright gallery2 carbon

I use the Carbon theme on gallery2. The copyright in the footer can be updated via the theme configuration on the web.

[/software/gallery] permanent link

Sat, 03 Jul 2010

Floating menu items left on screen in Windows

Keywords: Windows floating menu items left screen dwm

Sometimes, under Windows, a floating menu item gets left on the screen. It's possible it may have something to do with Chrome. The only way to get rid of it is to reboot the machine. (Or maybe logging out works, I don't think I ever tried.) Well, obviously neither of those options is particularly attractive, but it turns out there is another. better option. Killing the dwm.exe process fixes the problem far more satisfactorily.

dwm.exe is the Desktop Window Manager which looks after thiings such as the 3D effects and transparencies. When it is killed it simply restarts itself.

[/software/windows] permanent link

Fri, 02 Jul 2010

Copying a MySQL database

Keywords: copy mysql database db directory files disk partition machine

I wanted to copy a MySQL database on a disk that used to be attached to a Ubuntu machine that died, to its replacement. It turns out not to be too difficult.

# stop mysql
# mv /var/lib/mysql /var/lib/mysql.orig
# cp -a /media/old-disk/var/lib/mysql /var/lib
# chown -R mysql:mysql /var/lib/mysql

There were a couple of files in /var/lib/mysql that were owned by root - mysql_upgrade_info and debian-5.1.flag in my case. Change them back to being owned by root.

# start mysql

I actually had to reboot since something hung on restarting mysql. I have no idea why. Logs can be found in /var/log/mysql/error.log if required.

[/software/mysql] permanent link

Mon, 17 May 2010

Marking spam in mutt with spamassasin

Keywords: mutt spam spamassasin macro

For far too long I had fairly simple macros for mutt which would train spamassasin on a single message and then chuck it in my spam folder. It worked well, but only on single messages. I wanted something that would also work on a set of tagged messages in a reasonable time. Eventually I got around to working out how to do it.

Mutt has the limitation that for the pager the macro will not work on tagged messages, but I kept the macros the same as for the index for simplicity.

Here they are:

macro index S "<enter-command>set auto_tag=yes<enter><enter-command>unset wait_key<enter>WoC=learnspam<enter>\
<pipe-entry>sa-learn --spam --progress --mbox ~/Mail/learnspam && cat /dev/null > ~/Mail/learnspam<enter>\
s=spam<enter><enter-command>set wait_key<enter><enter-command>set auto_tag=no<enter>"

macro pager S "<enter-command>set auto_tag=yes<enter><enter-command>unset wait_key<enter>WoC=learnspam<enter><\
pipe-entry>sa-learn --spam --progress --mbox ~/Mail/learnspam && cat /dev/null > ~/Mail/learnspam<enter>\
s=spam<enter><enter-command>set wait_key<enter><enter-command>set auto_tag=no<enter>"

macro index H "<enter-command>set auto_tag=yes<enter><enter-command>unset wait_key<enter>C=learnspam<enter>\
<pipe-entry>sa-learn --ham --progress --mbox ~/Mail/learnspam && cat /dev/null > ~/Mail/learnspam<enter>\
s=spam<enter><enter-command>set wait_key<enter><enter-command>set auto_tag=no<enter>"

macro pager H "<enter-command>set auto_tag=yes<enter><enter-command>unset wait_key<enter>C=learnspam<enter>\
<pipe-entry>sa-learn --ham --progress --mbox ~/Mail/learnspam && cat /dev/null > ~/Mail/learnspam<enter>\
s=spam<enter><enter-command>set wait_key<enter><enter-command>set auto_tag=no<enter>"

[/software/mutt] permanent link

September 2017
Sun Mon Tue Wed Thu Fri Sat