:::: MENU ::::

Fix Firefox fullscreen video bug on Gnome 3

Does this sound like a familiar scenario?: You’ve found your favourite Seinfeld clip, you’ve waited for it to buffer, you’ve clicked fullscreen mode, swiftly alt-tabbed to check your mail (the thousandth time today), switched back into Firefox, clicked fullscreen again, only to find the comedy genius’ face has vacated your screen, or frozen, glass-eyed and unanimated, as the sound plays on? Seinfeld may be impossible to dislike, but this bug certainly isn’t.

Seinfeld clip on TouTube screenshot

Seinfeld’s “The Deal” in Firefox

To put the problem another way, fullscreen video only works the first time it’s attempted, and thereafter fails to show any images at all.

After what feels like years of suffering from this bug, a newbie Fedora convert last week encouraged me to cure the itch. Here’s how to fix it, adapted from Mozilla’s guide for Ubuntu.

The fix

  1. Press the meta (aka “windows”) key then type terminal.
  2. Open the terminal app, then type or paste:

    sudo gedit /usr/share/applications/firefox.desktop

  3. Enter your password, hit enter.
  4. Scroll to the bottom of the text in the editor that should have opened (that’s Gedit), and look for the line that reads Exec=firefox %u
  5. Replace it with this:

    Exec=env LD_PRELOAD=/usr/lib/libGL.so.1 firefox %u

  6. Then save it (ctrl + s), and close gedit (file menu -> close).
  7. Now restart Firefox and the problem should be solved.


What we do here is basically change the command that Linux uses to run Firefox. Instead of running it directly (%u means use the same window if new links are opened, instead of creating new ones), we preload a graphics library first (libGL). That graphics library handles the fullscreen switching properly.

Good luck!

Tip: install Hebrew fonts on Fedora Linux

Here’s a one line command that will install additional Hebrew fonts on Fedora 20. There’s a fair few in here, including a Free version of Hebrew Arial (much sought after). They’re all in repositories already so with yum it’s a breeze:

sudo yum install culmus-* alef-fonts* google-noto-sans-hebrew-fonts

FSCONS 2014 and patterns that plague communities

A week has passed since this year’s Free Society Conference in Gothenburg, Sweden, where last weekend I travelled to speak about "The case for Free Software Crowdfunding". Several talks have stayed with me, and crept into my thoughts over the last seven days. And one in particular will stay with me for a long time yet.

First of all, a quick summary:

  • 200 attendees
  • ~60 Talks, workshops, and performances
  • 2 Keynote speeches
  • 2 Live music sets
  • Hosted by Gothenburg University (Humanities Dept.)

This was my fifth time at FSCONS, and the conference has a special place in my heart. It was here in 2009 that I met Free Software professionals for the first time, first volunteered for the Free Software Foundation Europe, and first felt at home among digital freedom activists. FSCONS convinced me it could be possible to work for freedom professionally – not just volunteer during late nights and weekends. Seven months later I moved to Berlin to intern at FSFE.

Programming system product diagram

From program to product by Fred Brooks, from my talk

The conference has changed a lot since then. The venue has moved from the old location at Sweden’s iconic Chalmers University. Attendees have ebbed from around 400 to half that, and components which used to define the weekend, such as parties at Berg 211, and presentation of an annual Nordic Free Software Award, have dropped off the agenda. A new, younger organisation committee has been established in recent years, and the academics, such as friends Henrik Sandklef and Jonas Oberg, no longer attend. Even FSFE, who helped establish the first FSCONS in 2007, and who in 2009 convinced me to attend with discounted tickets and Fellowship meetings, no longer participate officially.

For all that change however, things are in surprisingly good shape. Talks were coordinated exceptionally well, keeping to schedule (a rare thing in my experience), with seamless handling of audio and video recording. Vegan food was dispensed at appropriate times, and while it wasn’t cheap (10 SEK / meal) it was nutritious, easy to find, and delivered and retracted smoothly. Live music in the large cafeteria area provided a good atmosphere for the conversations that, for many attendees, will have been the real highlight of the weekend. And at least one special announcement took place: the launch of The Journal of Peer Production on Friday evening, which did something to rekindle FSCONS’ academic glow.

The great exhibition of London illustration

A bazaar of thriving, funded, Free Software, as imagined in my talk

Also representing the academic community were Bjorn Lundell and his colleagues from the University of Skovde, who interviewed me about use of Open Standards in the enterprise. Having given my talk shortly before, my energy reserves were low, but I was nonetheless delighted to contribute my knowledge to a series of research which both Collabora and FSFE have used to defend and promote Free Software in the past.

The high note of the conference for me however was Leigh Honeywell’s presentation ‘Models We Use to Change the World‘. As she identified a long list of patterns which faced by well meaning organisations and relationships with their staff, I rushed to note the names of the many books that were referenced, and even a few perfectly selected quotes. "The tyranny of structurelessness". "The unaccounted cost of emotion work". "Undermanagement-induced burnout". These are some of the many concepts Leigh addressed during her whistlestop tour of organisational patters that hold back our communities. Some of those patterns bedevil commercial organisations too, and quotes from books such as "Exit, voice and loyalty" originate from that sector. Because they reminded me of many challenges that I’ve faced over 11 years of Free Software activism, they were fascinating. Moreso the possibility of overcoming the limits of those patterns now they’ve been identified.

In all, despite it’s altered flavour, FSCONS proved again to be a melting pot and meeting point for an alternative crop of Free Software do-ers. "Makers" and "commoners" made up the numbers of absent academics, and informal fratrenising on-campus substituted more lavish social events.

Flirtation painting by Glindoni

The wooing of new crowfunding backers and Free Software users from my talk

My talk should be online one week soon (many thanks to the inimitable Klondike and his team). I must add my thanks to friend and one-time colleague Lucile Falgueyrac for helping me iron out its kinks the night before. Perhaps I’ll manage another post on "last minute management of a presentation’s emotional content" if I have time. You’re unlikely to finda more in-depth yet accessible summary of the current TTIP negotiations than her talk (delivered Saturday), the recording of which should also be published shortly.

Otherwise, thanks to Stian Rødven Eide, Leif-Jöran, Oliver Propst, and the rest of the FSCONS organisers for another unique conference, and I look forward to the FSCONS CFP mid next year, and wonder what will be our subjects then

Tip: Fix Composer package 404 errors with continuous integration servers

Is PHP’s composer package manager pulling in dependencies successfully on your development machine but failing on your continuous integration server? In my case, Drone.io, the young, ludicrously simple CI platform, was failing in setup of a PHP project because of strange 404 “Not found” errors.

drone.io illustration

drone.io’s bug hunting, er, drone

The solution is to use a flag with your “composer install” command: composer install  --prefer-source

The explanation is that composer users GitHub’s API to fetch packages, and it uses it anonymously by default. Anonymous users have a strict call limit – 60 per hour per IP. That means that for a hosted CI, only 60 calls can be made to GitHub for potentially thousands of customers. When the limit is reached, GitHub returns 404 (not the most helpful error given the context).

Thanks to Pagoda Box for researching this solution.

Manually pair bluetooth devices on Linux via CLI (NFC workaround)

Today my new Thinkpad bluetooth keyboard arrived. It’s beautiful; I’m thrilled. It’s such a better companion for my XPS 15 9530 laptop than my old Penclick K2 the two don’t even compare.

Thinkpad bluetooth keyboard

Lenovo ThinkPad Compact Bluetooth Keyboard with TrackPoint

NFC comes built in to the new keyboard,  but unfortunately Gnu/Linux doesn’t support NFC well yet. Although NFC support is built in to the Linux Kernel, neither Gnome nor KDE have any support for it, and the number of NFC enabled apps in my Fedora 20 repository is princely zero. NFC won’t help me out pairing my device, so we need to do it the old fashioned way instead.

Unfortunately, it seems that my shiny NFC chip gets in the way of bluetooth pairing. Gnome network manager (using gnome-bluetooth) fails to connect to the device for an unstated reason. Rather than debug network manager (not fun in my experience), I decided to pair the device manually for more verbose output and another shot at success.

Since the release of Bluez 5 – the “Official Linux Bluetooth protocol stack” – command line Bluetooth interaction has become far more pleasant (and more colourful). Bluez 5 comes with a new command line client built in, superseeding the old collection of separate scripts called “simple-agent”. Here’s how to use it to pair your Bluetooth device, avoiding pitfalls of the network manager GUI.

Start the Bluez command line client:

list available devices (you can also search for new ones separately):

Note the MAC address of the devices that you wish to pair. E.g.:

Pair with the device:
pair 90:7F:61:11:0E:52

Trust the device (skip the laborious code entering step for keyboards):
trust 90:7F:61:11:0E:52

Finally, connect the device:
connect 90:7F:61:11:0E:52

Try out the connectivity – it should now work. In my case the keyboard is tapping away as I write this text. Good luck!

Prevent Git history re-writes with denyNonFastForwards on GitHub & BitBucket

As you may know, I’m (still) in love with Git. One of the reasons is it’s power, but, occasionally, that power allows you to shoot the rest of your team in the chest. Or delete their commits and wipe them from history (which feels about the same).

You can do this by forcing your pushes upon other git servers, using git push -f. As #git IRC‘s resident bot says, this is a bad idea:

Rewriting public history is not recommended. Everyone who has pulled the old history have to do work (and you’ll have to tell them to), so it’s infinitely better to just move on. If you must, you can use `git push -f <remote> <branch>` to force (and the remote may reject that, anyway). See http://goo.gl/waqum

It continues:

[!force_push] If you need to overwrite the history of a remote git repository (very bad idea, see !rewrite), you can do so with `git push -f`.  Note the remote server may reject this.  See man git-config and search for receive.denyNonFastForwards.  Best practice is for upstream servers to denyNonFastForwards.

If you don’t want team members to be able to rewrite time and wipe away a combined team’s work at the same time, you can do as the computer tells you and configure NonFastForwards by executing the following on your git staging server:

git config receive.denyNonFastForwards true

That will tell the server to refuse receipt of commits that do not follow naturally from commits already received.

What if you don’t have access to the remote server directly however? Fear not, it’s still possible.


Thankfully this features was added in 2013, and you can configure it as administrator of a repository via the web interface.

  1. Log in
  2. Go to your repository URL (or click on the repository name). E.g. https://bitbucket.org/your-repo
  3. Click on “Settings” at the bottom of the left NavBar
  4. Click on “Branch Management”, under “Settings”, submenu “General”
  5. Find “Prevent history re-writes (rebase) on these branches”, type “master” into the field below it, and click “Add”


Although GitHub currently provides no public interface for this functionality, it is apparently possible by contacting GitHub support directly and asking for the option to be set.

Do you know how to set this using GitLab? Share your how-tos for other platforms in the comments.

phpList API sprint: results

The last two days I’ve been sprint-hacking the phpList public API. What is PHPList, why an API, and what is a sprint-hack, you may ask. The first is a Free Software MailChimp competitor established 10 years ago, and available to install or use as a service. The second is for calling phpList actions remotely (such as sending a newsletter), and for easy integration with other apps and websites. The third I guess you know: a hacking sprint is a short burst of effort to write or improve a project, typically (but not always) code.

phpList logo

Continue Reading

Backup multiple email accounts automatically on Linux

ball of emails

I launched a new personal website last week, and changed my domain registrar and hosting company in the process. Being concerned how this would affect my primary email account (mail at samtuke dot com), and keen not to lose any of the 10.000+ messages that are stored there, I set about backing them up to a local folder. I also have an ancient Hotmail account, dating from 1997, containing all sorts of childhood contacts and life affecting discussions, and since Microsoft finally decided to allow users gratis use of the IMAP protocl, I decided to back up both email accounts to save time. Continue Reading