04 January 2014

541. Setting up mythtv on debian with leadtek 1000s (SAA7130)

I've been using me-tv (and occasionally kaffeine and vlc) to watch DVB-T on linux for the better part of two years. While it's working absolutely fine, and I really like me-tv, I'd like to get it to work in mythtv as well in the hope that it will support closed captioning.

Note that mythtv is only available via the deb-multimedia repo and not in the offical debian repos. I first tried to install mythtv that way, and while I got pretty far (scanned for channels etc.) I couldn't get a picture when trying to watch TV using mythtv-frontend. The deb-multimedia packages also screwed up my graphics card set-up somehow, which didn't improve my mood. So while that's probably a viable method, I finally decided to compile things myself. Note that if you do keep deb-multimedia enable and do a dist-upgrade the mythplugins package below will be replaced, and with that the main mythtv package as well, leading to all kinds of fun. You might want to give mythplugins a higher version number than I've done below to circumvent that.


Building

sudo dpkg-reconfigure dash

Select 'No', so that /bin/sh/ points to bash instead of dash.

The next port of call was http://www.mythtv.org/wiki/User_Manual:Initial_Installation 

sudo apt-get install build-essential liblircclient-dev libasound2-dev libdts-dev libdvdnav-dev \
 libxv-dev libxxf86vm-dev transcode libmp3lame-dev subversion qt4-dev-tools libqt4-dev libsamplerate0 \
 libxvidcore4 liba52-0.7.4-dev libfame-dev libcdio-dev msttcorefonts libasound2-doc libmad0-dev \
 libid3tag0-dev libvorbis-dev libflac-dev libcdaudio-dev libcdparanoia0-dev fftw3-dev libfaad-dev \
 libsmpeg-dev libmp4v2-dev libtag1-dev mysql-server libvisual-0.4-dev libexif-dev libxvmc-dev \
 libxinerama-dev uuid-dev libicu-dev 
sudo apt-get install yasm checkinstall gdb python-mysqldb python-urlgrabber libnet-upnp-perl
mkdir ~/tmp/mythtv -p
cd ~/tmp/mythtv
git clone -b fixes/0.27 git://github.com/MythTV/mythtv.git
cd mythtv/mythtv/
./configure --enable-proc-opt
make
sudo checkinstall --fstrans=no --install=no
0 - Maintainer: [ andy@helium ] 1 - Summary: [ mythtv 0.27 ] 2 - Name: [ mythtv ] 3 - Version: [ 0.27 ] 4 - Release: [ 1 ] 5 - License: [ GPL ] 6 - Group: [ checkinstall ] 7 - Architecture: [ amd64 ] 8 - Source location: [ mythtv ] 9 - Alternate source location: [ ] 10 - Requires: [ ] 11 - Provides: [ mythtv ] 12 - Conflicts: [ ] 13 - Replaces: [ ]
Exclude files that are in the home directory.

Continue:
sudo dpkg -i mythtv_0.27-1_amd64.deb
cd ../mythplugins/
sudo apt-get install libmysql++-dev python-oauth libdate-manip-perl libxml-simple-perl libimage-size-perl libdatetime-format-iso8601-perl libsoap-lite-perl libjson-perl 
./configure
make
sudo checkinstall --fsmetrans=no --install=no
0 - Maintainer: [ root@helium ] 1 - Summary: [ mythplugins 0.27 ] 2 - Name: [ mythplugins ] 3 - Version: [ 0.27 ] 4 - Release: [ 1 ] 5 - License: [ GPL ] 6 - Group: [ checkinstall ] 7 - Architecture: [ amd64 ] 8 - Source location: [ mythplugins ] 9 - Alternate source location: [ ] 10 - Requires: [ ] 11 - Provides: [ mythplugins ] 12 - Conflicts: [ ] 13 - Replaces: [ ]
sudo dpkg -i mythplugins_0.27-1_amd64.deb

Note that you may want to use a much higher version number for mythplugins than I've done above -- with 0.27 the deb-multimedia version of the package will take precendence, and cause all kinds of fun...

Setting up

sudo useradd mythtv
sudo usermod -a -G mythtv $USER
mkdir ~/.mythtv

Create a file called ~/.mythtv/mysql.txt:
DBHostName=localhost
DBHostPing=no
DBHostName=localhost
DBUserName=mythtv
DBName=mythconverg
DBPassword=mythtv
LocalHostName=helium
where helium is my hostname.
Before you can run mythtv-setup you should prepare the mysql database.

mysql -u root -p
> show databases;
> create database mythconverg;zymichost.com
> create user 'mythtv'@'%' identified by 'mythtv';
> create user 'mythtv'@'localhost' identified by 'mythtv';
> set password for 'mythtv'@'%' = password('mythtv');
> set password for 'mythtv'@'localhost' = password('mythtv');
> connect mythconverg;
> grant all privileges on *.* to 'mythtv'@'%' with grant option;
> grant all privileges on *.* to 'mythtv'@'localhost' with grant option;
> flush privileges;
> exit;

Now run setup:
mythtv-setup

The first time I did this it asked about country and language, and then exited. I then ran it again and went through the setup as shown in the figures below. Note that I had to use the IP, 192.168.2.123, of my computer rather than 127.0.0.1 (i.e. localhost).















I then ran
mythbackend

and let it run in a terminal, followed by
mythfrontend

in another terminal. And it worked! I mean, not the first time, but by following the instructions above I actually got it to work -- up to a point. The audio wasn't working.


While TV is a visual medium it's still nice to have sound. So, in mythfrontend I went to Settings, Audio and picked Pulseaudio, since that's what I use by default anyway.

 I did have the occasional issue with sudden white noise, so I changed to ALSA, and all has been perfect ever since:



Test driving:
Everything seems to be working fine. Hit M for menu:
 You can choose subtitles (or just hit T):

To bring up the Electronic Program Guide (EPG) hit S:
See http://www.mythtv.org/wiki/Keybindings for a list of shortcuts.

Anyway, I'm still exploring. The one thing that's not working yet is the remote control, but that will be solved in due course.

Missing channels:
Mythtv didn't pick up channels Nine, Gem and Go. While scan found them without issue by doing 'scan /usr/share/dvb/dvb-t/au-Melbourne > channels.conf', I couldn't find an easy way to import the scan data.

Nine Melbourne:191625000:INVERSION_AUTO:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:519:720:1072
GEM:191625000:INVERSION_AUTO:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:0:1073
GO!:191625000:INVERSION_AUTO:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:517:700:1074
EXTRA:191625000:INVERSION_AUTO:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:520:730:1075
EXTRA 2:191625000:INVERSION_AUTO:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:521:740:1076

Trying to import an existing scan in mythtv didn't allow me to provide a URL, but only showed two old scans pre-populating the import dialogue, which was both weird and annoying.

Instead the key was to add a new transport: fire up mythtv-setup, and go to the Channel editor. Note that I'm using a different skin/menu to the default one (Terra), but the process is the same.


See scan output above for the values to add here



 And you're pretty much done.

540. Briefly: prevent Youtube and Google from signing you in -- firefox version

The scenario: I've got a blogger account (i.e. this one) which is linked to my google account, and I'd like to be able to use youtube and google search without being considered as being logged in. If I log out in e.g. the google search page I also get logged out from blogger.  Gmail isn't an issue since I use thunderbird/evolution, but it would cause similar issue to blogger vs search/youtube.

The past year I've become increasingly annoyed by the behaviour of google applications -- they feel more intrusive and I keep on being asked to sign in and stay signed in. Without going into specifics, it's beginning to feel like Google is trying to turn the entire web into their version of Facebook. And I don't lie it.

Anyway, luckily there's a pretty simple way to stay signed out of Google search and youtube, even without using privacy mode -- by restricting the use of cookies.

Here's what you can do in Firefox:

1. Install the Cookies Manager+ add-on in firefox, and restart firefox
2. In firefox, go to Tools, Cookies Manager+
3. Click on Tools/Exceptions
4. Add google.com and youtube.com

Done. Now you can remain signed in to all other google sites, while staying signed out of Youtube and Google Search. Note that it doesn't make you  anonymous, but it just takes care of some of the minor nuisances associated with always being tracked by google.


27 December 2013

539. Laptop not suspending on closing lid in Debian Jessie/Gnome 3.8.4 -- need to use systemd

Edit: I suspect that there are solutions out there that don't require systemd. It just happened that this was the path of least resistance, at least for my laptop which has a fairly simple set up. Not sure my work cluster would be so straight-forward...

Original post:
Closing the laptop lid doesn't have any effect. dmesg returns
[95643.717984] systemd-logind[2731]: Lid closed.
[95643.718173] systemd-logind[2731]: Suspending...
[95648.722146] systemd-logind[2731]: Delay lock is active but inhibitor timeout is reached.
[95648.735369] systemd-logind[2731]: Failed to send delayed message: Launch helper exited with unknown return code 1
(also, why are we suddenly requiring systemd? I thought debian was going to be free from that...that...abomination...but I suppose this will be fixed before jessie goes stable in a couple of years)

Anyway, the issue seems to be that systemd hasn't got PID 1:
Working suspend/resume requires systemd to be PID 1 [1]. Boot with init=/bin/systemd for that.
And in my case I had
init=/sbin/bootchartd
in my GRUB_CMDLINE_LINUX_DEFAULT which I changed to
init=/bin/bootchartd
. Note that my full line is
GRUB_CMDLINE_LINUX_DEFAULT="quiet drm_kms_helper.poll=N init=/bin/systemd initcall_debug printk.time=y resume=UUID=8adf424c-c375-4035-8d5d-181489b4461b resume_offset=7182336"
where the resume commands are related to this post about hibernation using a swap file, and the drm_kms_helper.poll is related to this issue.

Anyway, rebooting gives
ps aux|grep systemd
root         1  0.1  0.1  46104  4668 ?        Ss   07:31   0:00 /bin/systemd
root       202  0.0  0.4 144868 18416 ?        Ss   07:31   0:00 /lib/systemd/systemd-journald
root       221  0.0  0.0  38500  2292 ?        Ss   07:31   0:00 /lib/systemd/systemd-udevd
root       877  0.0  0.0  37024  1760 ?        Ss   07:31   0:00 /lib/systemd/systemd-logind
message+   887  0.1  0.0  29148  2520 ?        Ss   07:31   0:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation

Closing (and opening) the lid gives

dmesg|grep PM
[..]
[  444.637761] PM: Syncing filesystems ... done.
[  444.668607] PM: Preparing system for mem sleep
[  444.784170] PM: Entering mem sleep
[  445.232203] PM: suspend of devices complete after 447.606 msecs
[  445.232862] PM: late suspend of devices complete after 0.650 msecs
[  445.277535] PM: noirq suspend of devices complete after 44.667 msecs
[  445.360219] PM: Saving platform NVS memory
[..]
[  445.509662] PM: noirq resume of devices complete after 100.525 msecs
[  445.510133] PM: early resume of devices complete after 0.295 msecs
[  447.065176] PM: resume of devices complete after 1555.037 msecs
[  447.151847] PM: Finishing wakeup.

i.e. it works.

So I'm now using systemd, I suppose. However, I have yet to explore whether I can still use my precious /etc/network/interfaces file. At least my network interfaces haven't been renamed using the systemd nomeclature which annoyed me so much back when I used Arch, and my /etc/udev/rules.d/70-persistent-net.rules are still respected.