A computer as a home media center

Notes published the
9 - 11 minutes to read, 2125 words

Recently (which in the meantime is one year ago) I helped to set up a new computer, and shortly after we asked ourselves, what to do with the old one.

The old computer is a Toshiba Satellite C660, according to some websites it was released in 2010, which means that it has been used at least for 10 years.

It came with Windows 7 preinstalled and was updated to Windows 10. It got replaced because it was extremely slow at every operation, even idling.

After taking dust for a couple of months in a box, I decided to play with it and create a home theatre and backup service.

The easiest media-station

If your PC happens to be a Raspberry, there are a lot of already packaged solutions that require little to no configuration.

For example, just download LibreELEC, flash it on the SD card, insert it into the Raspberry, and connect the Raspberry with an HDMI cable to the TV.

Done.

With the TV remote it is possible to control the whole UI thanks to CEC.

But LibreELEC is too minimal

Librelec is indeed a minimal system.

If you plan to do something else (it is a computer after all!), LibreELEC and similar systems might not be enough.

But I have an old PC, not a raspberry

The good thing is that on a PC, contrary to smart devices, you can nearly do anything you want.

No need to root or hack it, just install the operating system or programs you like.

Unfortunately, contrary to the Raspberry, I did not find a preconfigured solution similar to LibreElec.

A minimal home theatre system

For experimenting, I decided to stick with Debian.

I’ve downloaded the ISO from cdimage, flashed it on a USB stick, and booted the PC from it.

During the installation process, I avoided setting a root password (this way sudo is automatically enabled, and the root user is disabled), configured a user called toshiba (not very creative), and avoided installing a graphical environment (remember, I want a minimal system).

I’ve just installed ssh as it makes it easier to configure the PC.

Set up SSH keys

vim ~/.ssh/config   # add values for the new machine, for example, the username
ssh-keygen          # reply to questions
ssh-copy-id toshiba

Now I can log on to the machine with just ssh toshiba, without needing to type the password or the name of the user/machine.

Install and setup Kodi

This is pretty much straightforward

sudo apt install kodi

You might want to install additional packages like kodi-imagedecoder-raw, kodi-vfs-libarchive, kodi-peripheral-joystick, kodi-pvr-iptvsimple, and so on. Just do apt search kodi and see what packages are available and what might look interesting.

After installing Kodi, as the PC will be connected to a TV most of the time, it would make sense to log in automatically and start up Kodi immediately.

lightdm is a standalone login manager, and can be configured easily to accomplish both tasks.

Also for making the system a little more secure, it makes sense to create a separate Kodi user.

Execute as an administrator following commands

# add group for graphical login without password, see https://wiki.debian.org/DebianDesktopHowTo for details
and group --system nopasswdlogin;
if ! grep --quiet --fixed-strings nopasswdlogin /etc/pam.d/lightdm;  then :;
 sed -i '/^@include common-auth/i auth sufficient pam_succeed_if.so user ingroup nopasswdlogin\n' /etc/pam.d/lightdm;
fi

# add restricted user kodi
adduser --disabled-password --comment "" kodi;
usermod -a -G cdrom,video,plugdev,users,dialout,dip,input,netdev,nopasswdlogin kodi;


# add autologin with kodi program
printf '[Seat:*]

# autologin user kodi by default
autologin-user=kodi
autologin-session=kodi
user-session=kodi

# show user list, remove the need to type name in case of logout
greeter-hide-users=false
' > /etc/lightdm/lightdm.conf.d/99-home-theatre.conf

And that’s it.

Reboot the PC and it will start Kodi automatically.

Except that contrary to the Raspberry, you will not be able to control it with the TV remote. It does not matter how hard I searched, there is no PC on the market that supports CEC out of the box; the hardware is simply missing.

If you happen to have a PC that does support CEC (please contact me in that case, I was not able to find anything) or a dongle like the CEC adapter of pulse-eight (currently the only adapter I was able to find), then CEC will work out of the box.

It might make sense to install the package cec-utils, but it is not required.

Also, Kodi has no GUI for managing the network (especially WiFi), and Bluetooth devices. LibreElec has preinstalled some addons done directly by the LibreElec team for adding those functionalities.

If your PC can be connected with an ethernet cable, it should be the preferred solution, as it works out-of-the-box.

Otherwise, it is possible to configure the Wi-Fi manually by adding a configuration file under /etc/network/interfaces.d

An alternative is to use an interactive program from the command line.

Network Manager also has a command line interface (nmtui) available after sudo apt install network-manager.

This is probably more user-friendly if there are multiple networks, or if the PC might need to change from one network to the other because it is moved from one location to another.

As a Bluetooth manager, one can use bluetoothcl from the command line, or install blueman as a graphical alternative.

Install and setup Kodi with Openbox

From Kodi, it is possible to execute external programs, for example with the Advanced Emulator Launcher plugins

There are multiple reasons you might want to execute something else, it could be

  • a game to play

  • a browser instance pointed to Netflix (as there are no native and official clients for GNU/Linux systems) os other streaming services

  • a graphical Wi-Fi/Bluetooth manager

  • or something else entirely

By executing some programs, I’ve encountered at least a couple of issues.

The first is that with some programs, after closing them, the keyboard did not work anymore in Kodi. I had to log out and log in again.

The second one is that some programs have difficulties determining the screen size. Thus even if executed as full-screen programs, they won’t be.

The third is that there is no close button for those programs that are not fullscreen.

Adding a window manager solved all those issues. Openbox is pretty minimal and can be configured extensively, so it seems a good fit.

There are surely others that are as good, maybe even better.

# install openbox
apt install openbox

# configure it to start Kodi automatically
# and exit if Kodi ends
sudo -u kodi sh -c 'mkdir -p ~/.config/openbox/; printf "kodi --fs --standalone\nopenbox --exit\n">~/.config/openbox/autostart'

# add autologin with the Openbox program instead of starting Kodi directly
printf '[Seat:*]

# autologin kodi with openbox by default
autologin-user=kodi
autologin-session=openbox
user-session=openbox

# show user list, remove the need to type name in case of logout
greeter-hide-users=false
' > /etc/lightdm/lightdm.conf.d/99-home-theatre.conf

Thus instead of executing Kodi directly from the login manager, Openbox is started. Openbox will then execute Kodi on startup, and exit after Kodi is closed.

With those changes

  • Applications do not have any more issues determining the size of the monitor, and full-screen programs are actually fullscreen

  • there is a close button for every non-full-screen program

  • I never had an issue with the keyboard anymore

Disable standby

What happens when the lid of a laptop is closed?

Even if connected to an external monitor, it puts the machine on standby, at least this was my case.

This can be changed by adding the following command

# from https://wiki.debian.org/SystemdSuspendSedation
printf '[Login]
HandleLidSwitch=ignore
HandleLidSwitchDocked=ignore
HandleLidSwitchExternalPower=ignore
' > /etc/systemd/logind.conf.d/99-disable-suspend.conf

If you want to disable suspend and hibernation completely, you should also add the following lines

AllowSuspend=no
AllowHibernation=no
AllowSuspendThenHibernate=no
AllowHybridSleep=no

The ugly truth

While the instructions for setting up a minimal home theatre are short, I was a little bit unlucky, as I had several issues with the hardware, which means it took me much more time than expected (multiple days), to set up the system.

Maybe using another operating system would have helped, but maybe not.

Network

At first, I thought how lucky I was that the laptop had an ethernet port. Just attach the cable and no need to think about Wi-Fi.

Unfortunately, it turned out that the ethernet port disappeared every second boot. I do not know if this is a software or hardware issue, after trying different things for multiple days I gave up; using the wireless network card (which worked out of the box) sidestepped the issue.

Monitor/HDMI

I also had issues with the monitor.

Even if standby was disabled, starting the PC with a closed lid did not send the video signal through HDMI, except once. I was never able to reproduce it.

The laptop has an Nvidia card, and the correct packages are currently unavailable, the main reason is at least one unsolved security issue. The open-source driver seems to work well enough, but not so much when using both monitors at the same time. After trying (and failing) to install the official Nvidia package, I decided to keep the open-source variant, as normally I am going to use only the external monitor.

I solved the monitor issue by turning off the internal monitor and activating the monitor attached via HDMI. As the values are hardcoded, it does not make my solution portable between TVs and devices, but it is also true that it is attached to only one and I have no intention to move it.

My ~/.config/openbox/autostart file currently looks like

xrandr --output LVDS-1 --off
xrandr --output HDMI-1 --mode 1920x1080
kodi --fs --standalone
openbox --exit

The program xrandr is part of x11-xserver-utils.

Note that it also works correctly if the machine starts while the TV is turned off, and turned on after the boot is completed.

Disable all suspensions

From Kodi, it is possible to configure after how much time the monitor should be turned off. But even if you disable all screensaver settings, the monitor turned itself off after a given period of "inactivity".

With xset s off -dpms it is possible to disable the screensaver and DPMS (Energy Star) features.

If using a window manager, it should be trivial to add such a command after logging in, for example with Openbox it can be added in ~/.config/openbox/autostart.

But an even better approach would be to start the X server with those features disabled, this can be done for example in lightdm, by adding

[Seat:*]
# keep the screen on all the time
xserver-command=X -s 0 -dpms

to the other settings (for example autologin).

Audio

Alsa

I also had an issue with the audio. It did not matter how loud I turned the volume in Kodi, no sound came out of the machine.

It turns out that with some audio cards, the audio is muted (unfortunately I cannot find the reference anymore).

With alsamixer (from the package alsa-utils) I unmuted manually the audio, and the issue did not reappear anymore.

PulseAudio

Because of other reasons, I’ve switched from Alsa to Pulseaudio.

For Kodi this is not an issue, there is a graphical interface for configuring the output device.

But if you are starting other programs from Kodi, those will not necessarily use the same output device.

Thus I wanted to set the default audio device globally.

With pacmd list-sinks | grep -e 'name:' -e 'index:' it is possible to list the output devices; in my case, the output looked like

 index: 0
 name: <alsa_output.pci-0000_01_00.1.hdmi-stereo-extra3>
 index: 1
 * name: <alsa_output.pci-0000_00_1b.0.analog-stereo>

Since I want, by default, to output everything over HDMI, I created the configuration file

/etc/pulse/default.pa.d/hdmi.pa
set-default-sink alsa_output.pci-0000_01_00.1.hdmi-stereo-extra3

Conclusion

Even if was harder than expected (but simpler than using a custom device, like a phone), the "old" laptop is still in use.

While experimenting I put more focus on Video files, but Kodi offers a very decent interface for also handling music files and pictures.

The machine is powerful enough for handling other jobs, installing a minimal system can really revive old hardware.

It could be used for automating tasks, like creating backups of content over the network, sharing files, and downloading (or uploading) data…​


Do you want to share your opinion? Or is there an error, some parts that are not clear enough?

You can contact me anytime.