<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  
  
  <channel>
    <title>chrisjrob: ltsp</title>
    <link>https://chrisjrob.com</link>
    <atom:link href="https://chrisjrob.com/tag/ltsp/feed/index.xml" rel="self" type="application/rss+xml" />
    <description>GNU Linux, Perl and FLOSS</description>
    <language>en-gb</language>
    <pubDate>Fri, 13 Feb 2026 17:22:31 +0000</pubDate>
    <lastBuildDate>Fri, 13 Feb 2026 17:22:31 +0000</lastBuildDate>
    
    <item>
      <title>LTSP | Install X11VNC on LTSP5</title>
      <link>https://chrisjrob.com/2013/03/19/ltsp-install-x11vnc-on-ltsp5/</link>
      <pubDate>Tue, 19 Mar 2013 11:49:39 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2013/03/19/ltsp-install-x11vnc-on-ltsp5</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <p>This is how I installed x11vnc on our Debian Lenny LTSP5 server, these are my notes, nothing more.  Use at your peril!</p>

<h2 id="installing-x11vnc">Installing x11vnc</h2>

<!--more-->

<p>Enter the chroot</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo chroot /opt/ltsp/i386
</code></pre></div></div>

<p>And update the repositories that the ltsp environment uses for apt-get:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># apt-get update
# apt-get install x11vnc
</code></pre></div></div>

<h2 id="create-start-up-script">Create start-up script</h2>

<p>Still in the chroot, edit <code class="language-plaintext highlighter-rouge">/etc/init.d/x11vnc</code> and copy in the following script:</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">#!/bin/sh</span>

<span class="c">### BEGIN INIT INFO</span>
<span class="c"># Provides:x11vnc</span>
<span class="c"># Required-Start:$remote_fs $syslog</span>
<span class="c"># Required-Stop:$remote_fs $syslog</span>
<span class="c"># Default-Start:2 3 4 5</span>
<span class="c"># Default-Stop:0 1 6</span>
<span class="c"># Short-Description:Start X11VNC</span>
<span class="c"># Description:Start VNC server X11VNC at boot</span>
<span class="c">### END INIT INFO</span>

<span class="k">case</span> <span class="s2">"</span><span class="nv">$1</span><span class="s2">"</span> <span class="k">in
        </span>start<span class="p">)</span> 
                <span class="nb">sleep </span>6
                <span class="nv">XAUTH</span><span class="o">=</span><span class="sb">`</span>find /var/run/ldm-xauth<span class="k">*</span> <span class="nt">-type</span> f<span class="sb">`</span>
                logger <span class="nt">-f</span> /var/log/x11vnc <span class="s2">"Starting with </span><span class="nv">$XAUTH</span><span class="s2">"</span>
                start-stop-daemon <span class="nt">--start</span> <span class="nt">--oknodo</span> <span class="nt">--pidfile</span> /var/run/x11vnc.pid <span class="nt">--background</span> <span class="nt">--nicelevel</span> 15 <span class="nt">--make-pidfile</span> <span class="nt">--exec</span> /usr/bin/x11vnc <span class="nt">--</span> <span class="nt">-display</span> :7 <span class="nt">-loop</span> <span class="nt">-passwdfile</span> /etc/x11vncpassword <span class="nt">-nossl</span> <span class="nt">-logfile</span> /var/log/x11vnc <span class="nt">-auth</span> <span class="nv">$XAUTH</span>
        <span class="p">;;</span>
        stop<span class="p">)</span>  
                logger <span class="nt">-f</span> /var/log/x11vnc <span class="s2">"Stopping"</span>
                start-stop-daemon <span class="nt">--stop</span> <span class="nt">--oknodo</span> <span class="nt">--pidfile</span> /var/run/x11vnc.pid
        <span class="p">;;</span>
        restart<span class="p">)</span>
                logger <span class="nt">-f</span> /var/log/x11vnc <span class="s2">"Restarting"</span>
                <span class="nv">$0</span> stop
                <span class="nv">$0</span> start
        <span class="p">;;</span>
        condrestart<span class="p">)</span>
                <span class="nv">PID</span><span class="o">=</span><span class="sb">`</span><span class="nb">cat</span> /var/run/x11vnc.pid<span class="sb">`</span>
                <span class="nv">RUNNING</span><span class="o">=</span><span class="sb">`</span>ps h <span class="nt">--ppid</span> <span class="nv">$PID</span><span class="sb">`</span>
                <span class="k">if</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$RUNNING</span><span class="s2">"</span> <span class="o">==</span> <span class="s2">""</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
                        </span>logger <span class="nt">-f</span> /var/log/x11vnc <span class="s2">"No process matching /var/run/x11vnc.pid"</span>
                        <span class="nb">echo</span> <span class="s2">"No process matching /var/run/x11vnc.pid"</span>
                        <span class="nv">$0</span> restart
                <span class="k">else   
                        </span>logger <span class="nt">-f</span> /var/log/x11vnc <span class="s2">"Process matching /var/run/x11vnc.pid exists"</span>
                        <span class="nb">echo</span> <span class="s2">"Process matching /var/run/x11vnc.pid exists - no action taken"</span>
                <span class="k">fi</span>
        <span class="p">;;</span>
        <span class="k">*</span><span class="p">)</span>
                <span class="nb">echo</span> <span class="s2">"Usage: </span><span class="nv">$0</span><span class="s2"> start|stop|restart|condrestart"</span>
                <span class="nb">exit </span>1
        <span class="p">;;</span>
<span class="k">esac</span>

<span class="nb">exit </span>0
</code></pre></div></div>

<h2 id="finalise-start-up-script">Finalise start-up script</h2>

<p>Still in the chroot, make the script executable and link it into /etc/rc2.d:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># chmod 755 /etc/init.d/x11vnc
# update-rc.d x11vnc defaults
# ls -al /etc/rc2.d/*x11vnc
</code></pre></div></div>

<h2 id="set-x11vnc-password">Set x11vnc password</h2>

<p>Finally, create the /etc/x11vncpassword file with the password you want to use to connect to your thin clients:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># echo "thepassword" &gt; /etc/x11vncpassword
# chmod 400 /etc/x11vncpassword
# chown root:root /etc/x11vncpassword
</code></pre></div></div>

<p><strong>Replace “thepassword” with your chosen password.</strong></p>

<h2 id="alternative-method">Alternative Method</h2>

<p>The issue with the above method is that if you user does not reboot their client after logging off, then x11vnc does not restart.  An alternative, remove the above symlink from <code class="language-plaintext highlighter-rouge">/etc/rc2.d/S99x11vnc</code> and instead use an ldm start up script by adding the following two scripts:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># /opt/ltsp/i386/usr/share/ldm/rc.d/I99-x11vnc
# LDM Script to start x11vnc

XAUTH=`find /var/run/ldm-xauth* -type f`
start-stop-daemon --start --oknodo --pidfile /var/run/x11vnc.pid --background --nicelevel 15 --make-pidfile --exec /usr/bin/x11vnc -- -display :7 -loop -passwdfile /etc/x11vncpassword -nossl -logfile /var/log/x11vnc -auth $XAUTH
</code></pre></div></div>

<p>The “I” in I99-x11vnc denotes that this will be run after X and before LDM, which is perfect for VNC.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># /opt/ltsp/i386/usr/share/ldm/rc.d/X99-x11vnc
# LDM Script to stop x11vnc

start-stop-daemon --stop --oknodo --pidfile /var/run/x11vnc.pid
</code></pre></div></div>

<p>The “X” denotes that this script will be run upon logout, so this is closing down the x11vnc server, ready to restart with LDM.</p>

<p>This method will still not cope with X being terminated with ctrl+alt+backspace, in which scenario you can ssh onto the client and run <code class="language-plaintext highlighter-rouge">/etc/init.d/x11vnc condrestart</code> - you could also add this in as a local app to be accessible from the server desktop.</p>

<h2 id="references">References</h2>

<ul>
  <li>https://wiki.edubuntu.org/InstallX11VncOnLtspClients</li>
</ul>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP5 Local Devices</title>
      <link>https://chrisjrob.com/2010/11/19/ltsp5-local-devices/</link>
      <pubDate>Fri, 19 Nov 2010 15:04:50 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2010/11/19/ltsp5-local-devices</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <p>You’ve inserted a disk or memory stick in your thin client, and nothing happened, what next?</p>

<h2 id="check-ltsconf">Check lts.conf</h2>

<p>Each user you wish to be able to access their local devices needs LOCALDEV = True in lts.conf, alternatively you may add to the ‘[default]’ section to make this global.</p>

<!--more-->

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[192.168.1.198]
# Joe Bloggs Desktop
    LOCALDEV             = True
</code></pre></div></div>

<h2 id="check-user-is-in-fuse-group">Check user is in fuse group</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># groups userid
userid satff users audio fuse
</code></pre></div></div>

<p>If they are not in the fuse group then:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># adduser userid fuse
</code></pre></div></div>

<h2 id="check-ltsconf-settings-are-reaching-client">Check lts.conf settings are reaching client</h2>

<p>A simple typo can mean that your carefully crafted lts.conf file is not reaching its target audience.  To test, boot up the thin client and ctrl+alt+f1 to get to the console, login as root and type the following:</p>

<p>See LTSP Client Root Password if you are unable to log into the client.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># getltscfg -a
</code></pre></div></div>

<p>This will give you a list of all the settings that apply to this particular client, including any default settings.  You need to check that you can see the above LOCALDEV=”True” is visible.</p>

<h2 id="check-logs-on-client">Check logs on client</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># tail -f /var/log/syslog
</code></pre></div></div>

<p>Then try inserting the device, and you should see the detection - look for errors that might indicate what has gone wrong.</p>

<h2 id="check-udev-can-see-drive">Check UDEV can see drive</h2>

<p>Still on the client:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># udevadm info -q all -n sda1
</code></pre></div></div>

<p>Replace sda1 with the required device, e.g. sr0 for a cdrom etc.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>P: /block/sda/sda1
N: sda1
S: block/8:1
S: disk/by-id/usb-USB_DISK_2.0_J68J5KQHN7TQ0H7G-0:0-part1
S: disk/by-path/pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:0-part1
S: disk/by-uuid/99B8-E4E6
S: disk/by-label/PKBACK#\x20001
E: ID_VENDOR=USB
E: ID_MODEL=DISK_2.0
E: ID_REVISION=1219
E: ID_SERIAL=USB_DISK_2.0_J68J5KQHN7TQ0H7G-0:0
E: ID_SERIAL_SHORT=J68J5KQHN7TQ0H7G
E: ID_TYPE=disk
E: ID_INSTANCE=0:0
E: ID_BUS=usb
E: ID_PATH=pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:0
E: ID_FS_USAGE=filesystem
E: ID_FS_TYPE=vfat
E: ID_FS_VERSION=FAT16
E: ID_FS_UUID=99B8-E4E6
E: ID_FS_UUID_ENC=99B8-E4E6
E: ID_FS_LABEL=PKBACK# 001
E: ID_FS_LABEL_ENC=PKBACK#\x20001
E: ID_FS_LABEL_SAFE=PKBACK#_001
</code></pre></div></div>

<p>An example of a CDROM:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>P: /block/sr0
N: sr0
S: block/11:0
S: scd0
S: disk/by-path/pci-0000:00:1f.2-scsi-1:0:0:0
S: cdrom
S: cdrw
S: dvd
S: dvdrw
E: ID_CDROM=1
E: ID_CDROM_CD_R=1
E: ID_CDROM_CD_RW=1
E: ID_CDROM_DVD=1
E: ID_CDROM_DVD_R=1
E: ID_CDROM_DVD_RW=1
E: ID_CDROM_DVD_RAM=1
E: ID_CDROM_DVD_PLUS_R=1
E: ID_CDROM_DVD_PLUS_RW=1
E: ID_CDROM_DVD_PLUS_R_DL=1
E: ID_CDROM_MRW=1
E: ID_CDROM_MRW_W=1
E: ID_PATH=pci-0000:00:1f.2-scsi-1:0:0:0
</code></pre></div></div>

<h2 id="check-ltspfs-is-installed-on-the-server">Check ltspfs is installed on the server</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># dpkg -l ltspfs | grep ^ii
ii  ltspfs                                       0.6-1~bpo50+1                        Fuse based remote filesystem for LTSP thin clients
</code></pre></div></div>

<h2 id="check-fuse-is-running">Check fuse is running</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># lsmod | grep fuse
fuse                   47124  3 
</code></pre></div></div>

<p>If fuse is not running, then:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># echo fuse &gt;&gt; /etc/modules
# modprobe fuse
# adduser USER fuse
</code></pre></div></div>

<h2 id="kde-desktop-icons">KDE Desktop Icons</h2>

<ul>
  <li><a href="/2009/03/21/ltsp-local-device-icons-on-kde-desktop/">Local Device Icons on KDE Desktop</a></li>
</ul>

<h2 id="references">References</h2>

<p>For some additional troubleshooting, try: http://wiki.ubuntu.com/DebugLocalDev</p>


       ]]>
      </description>
    </item>
    
    <item>
      <title>Howto | Install Wine on LTSP</title>
      <link>https://chrisjrob.com/2010/10/06/install-wine-on-ltsp/</link>
      <pubDate>Wed, 06 Oct 2010 15:29:55 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2010/10/06/install-wine-on-ltsp</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/winehq_logo_glass.png" align="right" alt="Featured Image">
         
         <p><strong>These instructions have not been tested since re-writing, in particular there will be permissions issues.</strong></p>

<h2 id="step-1-install-wine">Step 1: Install Wine</h2>

<p>Please visit for instructions on how to install Wine:</p>

<!--more-->

<ul>
  <li>http://www.winehq.org/site/download</li>
</ul>

<p>If you get a problem with applications appearing without any text, then you need to install some Windows fonts in Wine. 
One option is to simply download them from <a href="http://sourceforge.net/projects/corefonts/">http://sourceforge.net/projects/corefonts/</a>. You may also be able to install via a debian installer package:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo apt-get ttf-mscorefonts-installer
</code></pre></div></div>

<p>Install Wine packages:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo apt-get install libwine libwine-print libwine-sane libwine-alsa
</code></pre></div></div>

<p>Your requirements may vary, a non-inclusive list of available libraries is:</p>

<ul>
  <li>libwine: the core wine library</li>
  <li>libwine-print: the printing library</li>
  <li>libwine-sane: the scanning library</li>
  <li>libwine-alsa: the alsa sound library</li>
  <li>libwine-oss: the oss sound library</li>
</ul>

<p>You will notice winetools mentioned on several websites, my understanding is that this is no longer supported.</p>

<h2 id="step-2-create-a-wine-directory-for-your-application">Step 2: Create a Wine directory for your application</h2>

<p>By default Windows applications are installed in <code class="language-plaintext highlighter-rouge">/home/user/.wine</code>. If you want to install your application in a different directory then you must use the WINEPREFIX variable.</p>

<p>If you want your application to be installed in <code class="language-plaintext highlighter-rouge">/usr/local/share/appname</code> you must first create the directory:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ cd /usr/local/share
$ mkdir appname
$ WINEPREFIX="/usr/local/share/appname" wineprefixcreate
</code></pre></div></div>

<p>In this directory you will now find a fake Windows drive and the Wine configuration files system.reg and user.reg.</p>

<h2 id="step-3-configure-your-wine-directory">Step 3: Configure your Wine directory</h2>

<p><strong>You can probably skip this step for typical installations.</strong></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ WINEPREFIX="/usr/local/share/appname" winecfg
</code></pre></div></div>

<h2 id="step-4-install-your-application">Step 4: Install your application</h2>

<h4 id="installing-from-an-msi-file">Installing from an .msi file</h4>

<p>You can install .msi files with the msiexec.exe utility. This command is built into Wine, so you don’t have to install Windows Installer from Microsoft.
If the .msi file is called msifile.msi you just have to type msiexec /i msifile.msi and the application will be installed.</p>

<p><strong>Make sure you’re not using a native version of msi.dll, but the builtin one.</strong>
To run the Windows install program, please type the following:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ WINEPREFIX="/usr/local/share/appname" wine /path/to/setup.exe
</code></pre></div></div>

<p><strong>Substitute “/path/to/setup.exe” with the installation path executable for your application</strong></p>

<h2 id="step-5-test-your-application">Step 5: Test your application</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ WINEPREFIX="/usr/local/share/appname" wine "drive_c/Program Files/app/appname.exe"
</code></pre></div></div>

<h2 id="step-6-configure-for-multi-user-operation">Step 6: Configure for multi-user operation</h2>

<p><strong>This section needs a re-write (or just refer to Example automation script below)</strong></p>

<p>It is possible to configure the system so that a system Wine installation (and applications) can be shared by all the users, and still let the users all have their own personalized configuration.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># Creating individual user directory, e.g. /home/username/.appname
# Symlink directory structure to /usr/local/share/appname
# Remove symlink for user.reg (will be auto-created for each user on first run)

$ ln -sf /usr/local/share/appname/system.reg system.reg
</code></pre></div></div>

<p>To assist in this process, please refer to the following guide:</p>

<ul>
  <li>http://www.winehq.org/site/docs/wineusr-guide/using-regedit</li>
</ul>

<p>and perhaps even symlink these back to the administrator’s account, to make it easier to install apps system-wide later:</p>

<p>You might be tempted to do the same for user.reg as well, however that file contains user specific settings. Every user should have their own copy of that file along with the permissions to modify it.</p>

<p>You’ll want to pay attention to drive mappings. If you’re sharing the system.reg file you’ll want to make sure the registry settings are compatible with the drive mappings in ~/.wine/dosdevices of each individual user. As a general rule of thumb, the closer you keep your drive mappings to the default configuration provided by wineprefixcreate, the easier this will be to manage. You may or may not be able to share some or all of the actual “c:” drive you originally installed the application to. Some applications require the ability to write specific settings to the drive, especially those designed for Windows 95/98/ME.</p>

<h3 id="example-automation-script">Example automation script</h3>

<p>This script was probably cobbled together from the superb ies4linux installation, or possibly from Franks Corner,</p>

<div class="language-pl highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">#!/usr/bin/perl</span>
<span class="c1"># Launch script for multiuser appname, master copy in /usr/local/share/appname.</span>

<span class="k">use</span> <span class="nv">strict</span><span class="p">;</span>

<span class="k">my</span> <span class="nv">$MASTERPREFIX</span> <span class="o">=</span> <span class="p">'</span><span class="s1">/usr/local/share/appname</span><span class="p">';</span>
<span class="k">my</span> <span class="nv">$WINEPREFIX</span>   <span class="o">=</span> <span class="nv">$ENV</span><span class="p">['</span><span class="s1">HOME</span><span class="p">'}</span> <span class="o">.</span> <span class="p">'</span><span class="s1">/.appname</span><span class="p">';</span>

<span class="k">use</span> <span class="nv">vars</span> <span class="sx">qw($MASTERPREFIX $WINEPREFIX)</span><span class="p">;</span>

<span class="c1"># If we're not set up, create the user's magic symlink-copy of the master</span>
<span class="c1"># installation.</span>

<span class="k">unless</span> <span class="p">(</span><span class="o">-</span><span class="nv">d</span> <span class="p">"</span><span class="si">$WINEPREFIX</span><span class="p">")</span> <span class="p">{</span>
	<span class="nb">system</span><span class="p">('</span><span class="s1">mkdir</span><span class="p">',</span> <span class="p">'</span><span class="s1">-p</span><span class="p">',</span> <span class="p">"</span><span class="si">$WINEPREFIX</span><span class="p">")</span> <span class="o">==</span> <span class="mi">0</span> <span class="p">](</span><span class="o">|</span> <span class="nb">die</span> <span class="p">"</span><span class="s2">mkdir -p </span><span class="si">$WINEPREFIX</span><span class="s2">: $?</span><span class="p">";</span>
	<span class="nb">system</span><span class="p">('</span><span class="s1">lndir</span><span class="p">',</span> <span class="p">"</span><span class="si">$MASTERPREFIX</span><span class="p">",</span> <span class="p">"</span><span class="si">$WINEPREFIX</span><span class="p">")</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">||</span> <span class="nb">die</span> <span class="p">"</span><span class="s2">lndir failed: is xutils installed? $?</span><span class="p">";</span>

	<span class="c1"># The profile directory will be recreated automatically by wine on the</span>
	<span class="c1"># first run, so it's OK to blow away eny existing copy hanging around in</span>
	<span class="c1"># unwritable symlink form from the install, and it's OK to just create a</span>
	<span class="c1"># blank one.</span>
   
	<span class="nv">$PROFILES</span> <span class="o">=</span> <span class="nv">$WINEPREFIX</span> <span class="o">.</span> <span class="p">'</span><span class="s1">/drive_c/windows/profiles</span><span class="p">';</span>
	<span class="nb">system</span><span class="p">('</span><span class="s1">rm</span><span class="p">',</span> <span class="p">'</span><span class="s1">-fr</span><span class="p">',</span> <span class="p">"</span><span class="si">$PROFILES</span><span class="p">")</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">||</span> <span class="nb">die</span> <span class="p">"</span><span class="s2">rm -fr </span><span class="si">$PROFILES</span><span class="s2"> failed: $?</span><span class="p">";</span>
	<span class="nb">system</span><span class="p">('</span><span class="s1">mkdir</span><span class="p">',</span> <span class="p">'</span><span class="s1">-p</span><span class="p">',</span> <span class="p">"</span><span class="si">$PROFILES</span><span class="p">")</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">||</span> <span class="nb">die</span> <span class="p">"</span><span class="s2">mkdir -p </span><span class="si">$PROFILES</span><span class="s2"> failed: $?</span><span class="p">";</span>

	<span class="c1"># WINE needs to be able to write to the following files, so they can't be</span>
	<span class="c1"># symlinks to root-owned ones.</span>
   
	<span class="k">foreach</span> <span class="k">my</span> <span class="nv">$file</span> <span class="p">('</span><span class="s1">.no_prelaunch_window_flag</span><span class="p">',</span> <span class="p">'</span><span class="s1">system.reg</span><span class="p">',</span> <span class="p">'</span><span class="s1">userdef.reg</span><span class="p">',</span> <span class="p">'</span><span class="s1">user.reg</span><span class="p">')</span> <span class="p">{</span>
		<span class="k">if</span> <span class="p">(</span><span class="o">-</span><span class="nv">l</span> <span class="nv">$WINEPREFIX</span> <span class="o">.</span> <span class="p">'</span><span class="s1">/</span><span class="p">'</span> <span class="o">.</span> <span class="nv">$file</span><span class="p">)</span> <span class="p">{</span>
			<span class="nb">system</span><span class="p">('</span><span class="s1">rm</span><span class="p">',</span> <span class="p">'</span><span class="s1">-f</span><span class="p">',</span> <span class="nv">$WINEPREFIX</span> <span class="o">.</span> <span class="p">'</span><span class="s1">/</span><span class="p">'</span> <span class="o">.</span> <span class="nv">$file</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">||</span> <span class="nb">die</span> <span class="p">"</span><span class="s2">rm -f </span><span class="si">$WINEPREFIX</span><span class="s2">/</span><span class="si">$file</span><span class="s2"> failed: $?</span><span class="p">";</span>
			<span class="nb">system</span><span class="p">('</span><span class="s1">cp</span><span class="p">',</span> <span class="nv">$MASTERPREFIX</span> <span class="o">.</span> <span class="p">'</span><span class="s1">/</span><span class="p">'</span> <span class="o">.</span> <span class="nv">$file</span><span class="p">,</span> <span class="nv">$WINEPREFIX</span> <span class="o">.</span> <span class="p">'</span><span class="s1">/</span><span class="p">'</span> <span class="o">.</span> <span class="nv">$file</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">||</span> <span class="nb">die</span> <span class="p">"</span><span class="s2">Cannot copy </span><span class="si">$MASTERPREFIX</span><span class="s2">/</span><span class="si">$file</span><span class="s2"> to </span><span class="si">$WINEPREFIX</span><span class="s2">/</span><span class="si">$file</span><span class="s2">: $?</span><span class="p">";</span>
		<span class="p">)</span>
	<span class="p">}</span>
	<span class="nb">system</span><span class="p">('</span><span class="s1">chmod</span><span class="p">',</span> <span class="p">'</span><span class="s1">-R</span><span class="p">',</span> <span class="p">'</span><span class="s1">og-rwx</span><span class="p">',</span> <span class="nv">$WINEPREFIX</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">||</span> <span class="nb">die</span> <span class="p">"</span><span class="s2">Cannot chmod -R og-rwx </span><span class="si">$WINEPREFIX</span><span class="s2">: $?</span><span class="p">";</span>

<span class="p">}</span>

<span class="nb">exec</span><span class="p">('</span><span class="s1">env</span><span class="p">',</span> <span class="p">'</span><span class="s1">WINEPREFIX=</span><span class="p">'</span> <span class="o">.</span> <span class="nv">$WINEPREFIX</span><span class="p">,</span> <span class="p">'</span><span class="s1">wine</span><span class="p">',</span> <span class="nv">$WINEPREFIX</span> <span class="o">.</span> <span class="p">'</span><span class="s1">/drive_c/Program Files/appname/appname.exe</span><span class="p">',</span> <span class="nv">@ARGV</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">||</span> <span class="nb">die</span> <span class="p">"</span><span class="s2">Failed to launch appname: $?</span><span class="se">\n</span><span class="p">";</span>

<span class="nb">exit</span><span class="p">;</span>
</code></pre></div></div>

<h2 id="references">References</h2>

<ul>
  <li><a href="http://www.winehq.org/">WineHQ</a>
    <ul>
      <li><a href="http://www.winehq.org/mailman/listinfo/wine-users">Wine Mailing List</a></li>
    </ul>
  </li>
  <li><a href="http://www.ltsp.org/">LTSP</a>
    <ul>
      <li><a href="http://marc.info/?l=ltsp-discuss&amp;r=1&amp;w=2">LTSP Mailing List</a></li>
    </ul>
  </li>
  <li><a href="http://www.tatanka.com.br/">IES4Linux</a></li>
  <li>
    <table>
      <tbody>
        <tr>
          <td>Franks Corner</td>
          <td>http://frankscorner.org/}</td>
        </tr>
      </tbody>
    </table>
  </li>
  <li>Wine printing problems:
    <ul>
      <li>http://www.la-sorciere.de/Wine-HOWTO/wineprintconfig.html</li>
      <li>http://groups.google.com/group/comp.emulators.ms-windows.wine/msg/b05da7237281dbab</li>
    </ul>
  </li>
</ul>

       ]]>
      </description>
    </item>
    
    <item>
      <title>Desktop Wallpaper</title>
      <link>https://chrisjrob.com/2010/09/18/desktop-wallpaper/</link>
      <pubDate>Sat, 18 Sep 2010 00:00:03 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2010/09/18/desktop-wallpaper</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/trident-wallpaper-300.png" align="right" alt="Featured Image">
         
         <p>When I launched our first LTSP server, I was very keen to make the system as pleasurable for the users as possible; to this end, I left users able to customise their desktop pretty much how they liked.  I decided that this free-for-all had gone too far, when I saw customers sitting in front of one user’s computer, sporting a desktop wallpaper of his baby son.  At the time I just set a system default of a fairly neutral blue / dark blue radial gradient, and put an item on my to-do list to create a desktop wallpaper.</p>

<!--more-->

<p>Those who read <a href="/2010/06/26/kde-wallpaper/">my earlier post regarding KDE Wallpaper</a> may have seen examples, and basically I created a red background with company logo and a few lighting affects, making suitable wallpapers for most of the common screen sizes.  It was when I went to implement these wallpapers that I realised that I had a problem - KDE only allows you to force one single wallpaper to all users, regardless of screen size.  I could allow the users to set their own wallpaper, from a select list, but it would be impossible to restrict them only to that list.  And what if they hop from one computer to another - the screen size will be wrong again.  No, I needed a way of changing the wallpaper at login to the correct wallpaper for their screensize, and that meant a perl script running at login.  The task could be broken into three parts:</p>

<ol>
  <li>Determine screen size</li>
  <li>Choose best wallpaper</li>
  <li>Set wallpaper</li>
</ol>

<p>To determine the screen size, I used a small Perl Tk routine:</p>

<div class="language-pl highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">sub </span><span class="nf">get_screen_size</span> <span class="p">{</span>
    <span class="k">use</span> <span class="nv">Tk</span><span class="p">;</span>
    <span class="k">my</span> <span class="nv">$mw</span><span class="o">=</span><span class="nv">tkinit</span><span class="p">;</span>
    <span class="nv">$mw</span><span class="o">-&gt;</span><span class="nv">withdraw</span><span class="p">;</span>
    <span class="k">return</span><span class="p">(</span><span class="nv">$mw</span><span class="o">-&gt;</span><span class="nv">screenwidth</span><span class="p">,</span> <span class="nv">$mw</span><span class="o">-&gt;</span><span class="nv">screenheight</span><span class="p">,</span> <span class="nv">$mw</span><span class="o">-&gt;</span><span class="nv">screendepth</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div></div>

<p>To select the best wallpaper, I found this far more complicated that I would have liked - the issue is that NX users have screen sizes that are non-standard, so I couldn’t rely on exact matches.  In any case, if I relied on perfect matches I would have been creating new wallpapers for each and every obscure monitor resolution.  The best approach I found was to score each wallpaper based on aspect, width and height, calculating the percentage error for each compared to the users screen size, summing the errors and picking the wallpaper with the lowest error.  Logically aspect would be far more important that the other errors, so I trebled the aspect error to make that the dominant criteria.</p>

<p>Lastly, I set the wallpaper using a simple dcop command:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>`dcop kdesktop KBackgroundIface setWallpaper "$newwallpaper" 6`;
</code></pre></div></div>

<p>After testing it thoroughly, I inserted a shortcut to the script in all users’ Autostart directories last night.</p>

<p>I arrived this morning to the comment <em>“it’s a bit bright any chance we could tone it down a bit”</em>.</p>

<p>I was very polite.</p>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP Iceweasel Hacks</title>
      <link>https://chrisjrob.com/2010/07/06/ltsp-iceweasel-hacks/</link>
      <pubDate>Tue, 06 Jul 2010 15:06:17 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2010/07/06/ltsp-iceweasel-hacks</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <p>This is just a list of the hacks or fixes that I currently have in place on Iceweasel.  These were not my invention, and surely I owe a debt of thanks to various sites; unfortunately I have no way of knowing which sites.</p>

<p>Some of these hacks are too facilitate system wide control, others help to maximise performance on a thin client system.</p>

<!--more-->

<h2 id="iceweasel-global-preferences">Iceweasel Global Preferences</h2>

<p><code class="language-plaintext highlighter-rouge">/etc/iceweasel/pref/iceweasel.js</code></p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// This is the Debian specific preferences file for Iceweasel</span>
<span class="c1">// You can make any change in here, it is the purpose of this file.</span>
<span class="c1">// You can, with this file and all files present in the</span>
<span class="c1">// /etc/iceweasel/pref directory, override any preference that is</span>
<span class="c1">// present in /usr/lib/iceweasel/defaults/preferences directory.</span>
<span class="c1">// While your changes will be kept on upgrade if you modify files in</span>
<span class="c1">// /etc/iceweasel/pref, please note that they won't be kept if you</span>
<span class="c1">// do make your changes in /usr/lib/iceweasel/defaults/preferences.</span>
<span class="c1">//</span>
<span class="c1">// Note that lockPref is allowed in these preferences files if you</span>
<span class="c1">// don't want users to be able to override some preferences.</span>

<span class="nx">lockPref</span><span class="p">(</span><span class="dl">"</span><span class="s2">extensions.update.enabled</span><span class="dl">"</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span>

<span class="c1">// Use LANG environment variable to choose locale</span>
<span class="nx">lockPref</span><span class="p">(</span><span class="dl">"</span><span class="s2">intl.locale.matchOS</span><span class="dl">"</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span>

<span class="c1">// Disable default browser checking.</span>
<span class="nx">lockPref</span><span class="p">(</span><span class="dl">"</span><span class="s2">browser.shell.checkDefaultBrowser</span><span class="dl">"</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span>

<span class="c1">// ========= LTSP SPECIFIC HACKS ========</span>

<span class="c1">// Disable "safe browsing" feature that hogs CPU, HDD, etc. etc. in LTSP</span>
<span class="nx">lockPref</span><span class="p">(</span><span class="dl">"</span><span class="s2">browser.safebrowsing.enabled</span><span class="dl">"</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span>
<span class="nx">lockPref</span><span class="p">(</span><span class="dl">"</span><span class="s2">browser.safebrowsing.malware.enabled</span><span class="dl">"</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span>

<span class="c1">// Disable annoying location-bar suggestion "feature" that is sludgy with thin-clients</span>
<span class="nx">lockPref</span><span class="p">(</span><span class="dl">"</span><span class="s2">browser.urlbar.maxRichResults</span><span class="dl">"</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>

<span class="c1">// Disable offline/disk caching of web pages</span>
<span class="nx">lockPref</span><span class="p">(</span><span class="dl">"</span><span class="s2">browser.cache.offline.enable</span><span class="dl">"</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span>
<span class="nx">lockPref</span><span class="p">(</span><span class="dl">"</span><span class="s2">browser.cache.disk.enable</span><span class="dl">"</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span>
<span class="nx">lockPref</span><span class="p">(</span><span class="dl">"</span><span class="s2">browser.cache.memory.enable</span><span class="dl">"</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span>

<span class="c1">// ========= PROXY HACKS =========</span>

<span class="nx">lockPref</span><span class="p">(</span><span class="dl">"</span><span class="s2">network.proxy.type</span><span class="dl">"</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nx">lockPref</span><span class="p">(</span><span class="dl">"</span><span class="s2">network.proxy.share_proxy_settings</span><span class="dl">"</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span>
<span class="nx">lockPref</span><span class="p">(</span><span class="dl">"</span><span class="s2">network.proxy.http</span><span class="dl">"</span><span class="p">,</span> <span class="dl">"</span><span class="s2">192.168.1.254</span><span class="dl">"</span><span class="p">);</span>
<span class="nx">lockPref</span><span class="p">(</span><span class="dl">"</span><span class="s2">network.proxy.http_port</span><span class="dl">"</span><span class="p">,</span> <span class="mi">800</span><span class="p">);</span>
<span class="nx">lockPref</span><span class="p">(</span><span class="dl">"</span><span class="s2">network.proxy.no_proxies_on</span><span class="dl">"</span><span class="p">,</span> <span class="dl">"</span><span class="s2">localhost, 127.0.0.1, 192.168.1.0/24</span><span class="dl">"</span><span class="p">);</span>

<span class="c1">// ========= MISC HACKS ==========</span>

<span class="nx">lockPref</span><span class="p">(</span><span class="dl">"</span><span class="s2">browser.startup.homepage</span><span class="dl">"</span><span class="p">,</span> <span class="dl">"</span><span class="s2">http://www.example.co.uk/</span><span class="dl">"</span><span class="p">);</span>
<span class="nx">lockPref</span><span class="p">(</span><span class="dl">"</span><span class="s2">app.update.enabled</span><span class="dl">"</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span>
</code></pre></div></div>

<h2 id="iceweasel-image-caching">Iceweasel Image Caching</h2>

<p>I understand that, on websites with certain size of image, that the thin client xorg starts to take a ridiculous amount of memory, resulting xorg dieing and the thin client returning to the login page.  The following may help:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo echo "MOZ_DISABLE_IMAGE_OPTIMIZE=1" &gt;&gt; /etc/profile
</code></pre></div></div>

<h2 id="references">References</h2>

<p>I must apologise for the lack of references, if you recognise some of your work in the above, please do accept my apologies.</p>

       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP5 Display Troubleshooting</title>
      <link>https://chrisjrob.com/2010/07/06/ltsp5-display-troubleshooting/</link>
      <pubDate>Tue, 06 Jul 2010 09:50:08 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2010/07/06/ltsp5-display-troubleshooting</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <p>This is currently a few scrappy notes just to jog my memory as to things to try.  Messing about with monitor settings can blow your monitor, graphics card and probably both; although in practice sensible use should ensure that never happens to you.</p>

<p>Note that some of these commands may not exist on your system, if you need to install them, then remember to install into the chroot, e.g.:</p>

<!--more-->

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># chroot /opt/ltsp/i386
# apt-get update
# apt-get install lshw
# exit
</code></pre></div></div>

<p>Erm, suppose I should mention this whole page was tested on Debian Lenny.</p>

<h2 id="cables">Cables</h2>

<p>Do consider trying a new monitor cable - as a poor quality or damaged cable can cause problems that are difficult to trace.  A few seconds to try a different cable might save you endless time.</p>

<h2 id="a-word-about-drivers">A word about drivers</h2>

<p>There are often multiple drivers for a particular graphics card, for example with nvidia cards you can sometimes use the opensource “nv” driver and sometimes the proprietary “nvidia” driver, and I believe there is a “nouveau” driver, which I have not yet experienced.  Similarly in intel, stipulating that the driver should be “intel” may solve your problem.  See lspci below for details.</p>

<h2 id="x-authority">X Authority</h2>

<p>All of the following commands were run from an ssh session to the thin client itself, for this to work you need to install openssh-server in the chroot.  Alternatively you can simply go to the client and type ctrl-alt-f1 to access to the client’s console and type the following commands from there.  Obviously the benefit to the ssh approach is that you can do it remotely and cut and paste from your browser into the client.</p>

<p>We need to be able to access the xserver from the console, so we need to set the XAUTHORITY:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># export XAUTHORITY=`find /var/run -name Xauthority`
# echo $XAUTHORITY
/var/run/ldm-xauth-qOQkpTdNp/Xauthority
# export DISPLAY=:7
#
</code></pre></div></div>

<h2 id="useful-programs">Useful Programs</h2>

<h3 id="lspci">lspci</h3>

<p>In order to google your problems, you’ll need to know the make and model of your graphics card, to find this out, run the lspci command:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># lspci
# lspci -v | more
</code></pre></div></div>

<p>The first command is a summary, the second command gives you more information.  The “VGA compatible controller” is probably for what you’re looking.</p>

<h3 id="lshw">lshw</h3>

<p>List Hardware will list all the hardware on your PC.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># lshw -C display
</code></pre></div></div>

<h3 id="getltscfg">getltscfg</h3>

<p>Report all the settings from lts.conf which apply to this terminal.  This helps diagnose those occasions where the client is refusing to obey your lts.conf commands.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># getltscfg -a
</code></pre></div></div>

<h3 id="xvidtune">xvidtune</h3>

<p>xvidtune -show will report the current monitor settings as a modeline:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># xvidtune -show
</code></pre></div></div>

<p>You can also run xvidtune as a localapp when logged into the thin client:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>"/usr/bin/ltsp-localapps xvidtune"
</code></pre></div></div>

<h3 id="xdpyinfo">xdpyinfo</h3>

<p>xdpyinfo reports a great many details from the xserver, including resolution, colour depth etc:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># xdpyinfo | more
</code></pre></div></div>

<h3 id="gtf-cvt">gtf cvt</h3>

<p>There are two tools for creating a modeline - gtf and cvt.  My understanding is that cvt is the newer tool, in use from 2003, but tbh I really don’t know which you should use.  Both tools work in the same way.  Some examples:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># gtf 1920 1080 60
# cvt 1280 1024 75
</code></pre></div></div>

<h3 id="xrandr">xrandr</h3>

<p>To save rebooting endlessly you can test monitor settings on the fly with xrandr:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># xrandr
# xrandr --newmode "1920x1080_60.00"  172.80  1920 2040 2248 2576  1080 1081 1084 1118  -HSync +Vsync
# xrandr --addmode VGA "1920x1080_60.00"
# xrandr --output VGA --mode "1920x1080_60.00"
# xrandr --auto
</code></pre></div></div>

<p>The first command provides you with useful information about your xserver, including the available modes, and most importantly the available “outputs” (these are your monitors/displays); in the above example my only output is a monitor called “VGA”.  newmode creates the newmode (e.g. as output by gtf or cvt), addmode makes that mode applicable to the output, and the next command activates that mode.  The final command “auto” will reset your display automatically, probably your previous settings.</p>

<h2 id="references">References</h2>

<p>For once almost all of this was my own work, and so all my fault ;).  That said the following page was helpful to me in the section about xrandr:</p>

<ul>
  <li>https://wiki.ubuntu.com/X/Config/Resolution</li>
</ul>

       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP5 Upgrade</title>
      <link>https://chrisjrob.com/2010/06/25/ltsp5-upgrade/</link>
      <pubDate>Fri, 25 Jun 2010 17:05:31 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2010/06/25/ltsp5-upgrade</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <h2 id="introduction">Introduction</h2>

<p>This is a guide to upgrading from Debian Etch and LTSP 4.2 to Debian Etch and LTSP 5.  This is largely based on the following page which should be your primary guidance on installation:</p>

<ul>
  <li>http://wiki.debian.org/LTSP/Howto</li>
</ul>

<!--more-->

<p>Now that Debian Lenny has become the stable release, you should install that instead, see the above document for guidance, and/or my LTSP5 Install page.</p>

<h2 id="warning">Warning</h2>

<p>This page seems a little outdated, most importantly it refers to the LTSP Backports repository, which is now obsolete.  You should instead visit http://backports.org/ and add the Debian Lenny repository.  All references to alioth.debian.org are redundant.  You are probably best off going to this page:</p>

<ul>
  <li>http://wiki.debian.org/LTSP/Howto</li>
</ul>

<h2 id="back-up-optltsp">Back-up /opt/ltsp</h2>

<p>This will copy your entire <code class="language-plaintext highlighter-rouge">/opt/ltsp</code> to <code class="language-plaintext highlighter-rouge">/opt/ltsp42</code>.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># cd /opt
# mkdir ltsp42
# cd ltsp
# tar cf - * | (cd /opt/ltsp42; tar xfp - )
</code></pre></div></div>

<h2 id="backup-other-configurations">Backup other configurations</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># cd /opt/ltsp42
# mkdir conf
# cp /etc/ltsp.conf /opt/ltsp42/conf/
# cp /etc/ltsp-localdev.conf /opt/ltsp42/conf/
# cp /etc/dhcp3/dhcpd.conf /opt/ltsp42/conf/
</code></pre></div></div>

<p><strong>This list is not exhaustive - if you can think of any other configurations outside of <code class="language-plaintext highlighter-rouge">/opt/ltsp</code> - back them up!</strong></p>

<h2 id="backup-tftpboot">Backup tftpboot</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># cd /opt/ltsp42
# mkdir tftpboot
# cd /tftpboot
# tar cf - * | (cd /opt/ltsp42/tftpboot; tar xfp - )
</code></pre></div></div>

<h2 id="remove-lbe-if-installed">Remove lbe if installed</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># cd /usr/local
# rm -r lbe
</code></pre></div></div>

<h2 id="add-backports-repository">Add Backports Repository</h2>

<p><strong>This section is outdated - the latest packages are simply in Debian Backports for Lenny.</strong></p>

<p>Given that you have chosen to upgrade to LTSP5, it is probably that you want to have the new technologies, which are currently only available in Backports.  If you already have Backports listed in <code class="language-plaintext highlighter-rouge">/etc/apt/sources.list</code> then you may skip this stage.</p>

<h3 id="add-the-keys-for-the-repository-to-your-keyringafter-verifying-that-you-trust-them">Add the key(s) for the repository to your keyring(after verifying that you trust them)</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># wget http://pkg-ltsp.alioth.debian.org/debian/pkg-ltsp-keyring
# apt-key add pkg-ltsp-keyring 
</code></pre></div></div>

<h3 id="add-to-etcaptsourceslist">Add to /etc/apt/sources.list</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>deb http://pkg-ltsp.alioth.debian.org/debian etch-ltsp-backports main
</code></pre></div></div>

<h3 id="configure-pinning-in-etcaptpreferences">Configure pinning in /etc/apt/preferences</h3>

<p>If you do not have a preferences file, then an example one might be:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Package: ltsp-server
Pin: origin pkg-ltsp.alioth.debian.org
Pin-Priority: 998

Package: ltsp-server-standalone
Pin: origin pkg-ltsp.alioth.debian.org
Pin-Priority: 998

Package: ltspfs
Pin: origin pkg-ltsp.alioth.debian.org
Pin-Priority: 998

Package: *
Pin: release o=Debian,a=stable
Pin-Priority: 900

Package: *
Pin: origin www.backports.org
Pin-Priority: 700

Package: *
Pin: release o=Debian,a=testing
Pin-Priority: 500

Package: *
Pin: release o=Debian,a=unstable
Pin-Priority: 300

Package: *
Pin: release o=Debian
Pin-Priority: -1
</code></pre></div></div>

<h3 id="apt-get-update">Apt-get Update:</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># apt-get update
</code></pre></div></div>

<h2 id="how-you-are-logged-in">How you are logged in?</h2>

<p>You should be logged in either directly to the console, or via ssh (or perhaps FreeNX).  If you are logged in from an LTSP Client, then there is a likelihood that your client will be terminated during installation.</p>

<p>The same clearly applies to your users.  In any case some of these processes are CPU intensive (e.g. ltsp-build-client) and it’s a good idea to have everyone off the system (this may even be a necessity).</p>

<h2 id="remove-old-ltsp-packages">Remove Old LTSP Packages</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># apt-get --purge remove ltsp-utils atftpd
# cd /opt
# rm -r ltsp
</code></pre></div></div>

<h2 id="install-new-packages">Install new packages</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># apt-get -t 'etch-ltsp-backports' install ltsp-server-standalone ltsp-server
# dpkg -l ltsp-server | awk '/^ii/{print $2" "$3}'
</code></pre></div></div>

<p><strong>Make sure the version ltsp-server is 5.0.40~ or greater.</strong></p>

<h2 id="build-the-ltsp-client-environment">Build the LTSP client environment</h2>

<p><strong>The ltsp-build-client script needs a lot of time if you have an older server.</strong></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>#  ltsp-build-client --extra-mirror "http://pkg-ltsp.alioth.debian.org/debian etch-ltsp-backports main" --apt-key /etc/apt/trusted.gpg
</code></pre></div></div>

<p><strong>Don’t be tempted to use a simple ltsp-build-client command, as you need to specify backports repository (as shown above).</strong></p>

<p>The ltsp-build-client command will download a complete Debian filesystem into <code class="language-plaintext highlighter-rouge">/opt/ltsp/i386</code> (or specify an alternate location with ‘–base’) and install the ltsp-client and ldm packages (the LTSP Display Manager).</p>

<p>The 2 ltsp configuration files inside the client are <code class="language-plaintext highlighter-rouge">/etc/lts.conf</code> and <code class="language-plaintext highlighter-rouge">/etc/default/ltsp-client-setup</code>. See the examples in <code class="language-plaintext highlighter-rouge">/usr/share/doc/ltsp-client*</code>. Also see the <a href="http://doc.ubuntu.com/edubuntu/edubuntu/handbook/C/customizing-thin-client.html">Edubuntu wiki</a>.</p>

<p><strong>Debian LTSP still uses NFS by default.</strong></p>

<p><strong>If you change the IP data after you have done the initial setup and run ltsp-update-sshkeys on the server.</strong></p>

<p>The files the client will boot are installed on the server into <code class="language-plaintext highlighter-rouge">/var/lib/tftpboot</code>, unlike LTSP4.2 which installed in <code class="language-plaintext highlighter-rouge">/tftpboot</code>.</p>

<h2 id="configure-dhcp-server">Configure DHCP Server</h2>

<p>Edit <code class="language-plaintext highlighter-rouge">/etc/dhcp3/dhcpd.conf</code>.</p>

<p>As you already had DHCP working, under LTSP4.2, then it will just need some modification.  In order to configure your dhcpd.conf, you should refer to examples in <code class="language-plaintext highlighter-rouge">/usr/share/doc/ltsp-server/examples/dhcpd.conf</code> or <code class="language-plaintext highlighter-rouge">/etc/ltsp/dhcpd.conf</code> and adjust for your network.</p>

<p>Specifically, you need to make the following changes:</p>

<h3 id="root-path">Root Path</h3>

<p>Take the IP address out of your root-path statement as LTSP5 doesn’t support that style of root-path</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>option root-path  "/opt/ltsp/i386";
</code></pre></div></div>

<h3 id="filename">Filename</h3>

<p>Change the filename entries to:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>filename   "/ltsp/i386/pxelinux.0";
</code></pre></div></div>

<h3 id="next-server">Next Server</h3>

<p>Etch is still affected by: http://bugs.debian.org/416868 so you need to add this line if the dhcp server and tftp server are the same:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>next-server ip.address.of.server;
</code></pre></div></div>

<h3 id="restart-dhcp3-server">Restart dhcp3-server</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># /etc/init.d/dhcp3-server restart
</code></pre></div></div>

<p>Watch for errors, if it will not restart then correct errors and try again.</p>

<h2 id="configure-exports">Configure Exports</h2>

<p>Edit <code class="language-plaintext highlighter-rouge">/etc/exports</code> to include the following line:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/opt/ltsp *(ro,no_root_squash,async,no_subtree_check)
</code></pre></div></div>

<p>Then restart the NFS Kernel Server:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># /etc/init.d/nfs-kernel-server restart
</code></pre></div></div>

<h2 id="start-tftpd">Start tftpd</h2>

<p>By default, tftpd-hpa is started from inetd, so you may need to restart inetd after installing tftpd-hpa.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># /etc/init.d/openbsd-inetd restart
</code></pre></div></div>

<p>Alternately, edit <code class="language-plaintext highlighter-rouge">/etc/default/tftpd-hpa</code> to have tftpd-hpa start on it’s own.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>RUN_DAEMON="yes"
</code></pre></div></div>

<p>And then restart with:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># /etc/init.d/tftpd-hpa restart
</code></pre></div></div>

<h2 id="test-boot-a-client">Test boot a client</h2>

<p>Boot a PXE or Etherboot capable machine and enjoy!</p>

<h2 id="changing-the-client">Changing the Client</h2>

<p>See the following page for details:  http://doc.ubuntu.com/edubuntu/edubuntu/handbook/C/customizing-thin-client.html</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># sudo chroot /opt/ltsp/i386
# apt-get install rdesktop
# sudo ltsp-update-image
</code></pre></div></div>

<h2 id="setting-root-password-for-client">Setting root password for client</h2>

<p>Screen scripts are how LTSP determines what type of login will run on what virtual screen. Most GNU/Linux machines have 12 virtual consoles, which you can access by pressing Control-Alt-F1, through Control-Alt-F12. There is a text based getty that is started on screen 1, but you normally can’t log into it, as there are no local users on the thin client.</p>

<p>However, for debugging purposes, you may want to set up root to log in on the thin client. You may need to do this if you’re debugging problems with local devices, for example. Fortunately, it’s easy to do: on the server, just chroot into the LTSP chroot, and set the password with passwd.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo chroot /opt/ltsp/i386
passwd
</code></pre></div></div>

<h2 id="further-information">Further information</h2>

<ul>
  <li><a href="/2009/04/30/ltsp5-sound/">LTSP5 Sound</a></li>
  <li><a href="/2010/11/19/ltsp5-local-devices/">LTSP5 Local Devices</a></li>
</ul>

<h2 id="references">References</h2>

<ul>
  <li>http://wiki.debian.org/LTSP/Howto
    <ul>
      <li>http://doc.ubuntu.com/edubuntu/edubuntu/handbook/C/customizing-thin-client.html</li>
    </ul>
  </li>
  <li>http://www.mail-archive.com/ltsp-discuss@lists.sourceforge.net/msg33415.html</li>
  <li>http://www.linuxagora.com/vbforum/showthread.php?t=749</li>
  <li>http://www.ltsp.org/twiki/bin/view/Ltsp/Debian#LTSP_5</li>
  <li>http://marc.info/?l=ltsp-discuss&amp;w=2&amp;r=1&amp;s=ltsp5+debian+etch&amp;q=b</li>
</ul>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP Client Hardware</title>
      <link>https://chrisjrob.com/2010/06/22/ltsp-client-hardware/</link>
      <pubDate>Tue, 22 Jun 2010 08:49:21 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2010/06/22/ltsp-client-hardware</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <h2 id="introduction">Introduction</h2>

<p>The selection of client hardware is an interesting topic, that causes much confusion for those unfamiliar with LTSP.  When you start out with LTSP, the likelihood is that one of your motivations is to extend the life of your existing clients.  But you’d be lucky indeed not to require a few new clients, and of course over time you will need to purchase replacements for hardware failures.  So what are your options?</p>

<!--more-->

<h2 id="options">Options</h2>

<ul>
  <li><a href="#existing-pcs">Existing PCs</a></li>
  <li><a href="#thin-clients-designed-for-ltsp">Thin clients designed for LTSP</a></li>
  <li><a href="#thin-clients-designed-for-citrix">Thin clients designed for Citrix</a></li>
  <li><a href="#barebones-pcs">Barebones PCs</a></li>
  <li><a href="#self-build-pcs">Self-build PCs</a></li>
  <li><a href="#new-pcs">New PCs</a></li>
</ul>

<h2 id="existing-pcs">Existing PCs</h2>

<p>Well you obviously don’t want to throw out all your existing hardware, but do bear in mind that the electrical cost is likely to be around £40 a year, and so a replacement that brings this down to £15 a year, might be easier to justify than you might imagine.  If you do want to keep your existing PCs, then do consider unplugging the hard drives.  Hard drives are not required on LTSP clients and they consume unnecessary power.  They also can often be noisy, unplugging an old drive can miraculously silence an annoyingly loud older PC.</p>

<h2 id="thin-clients-designed-for-ltsp">Thin clients designed for LTSP</h2>

<p>I have no experience of this route.  One option is to purchase from Diskless Workstations, who support the LTSP project.</p>

<ul>
  <li>http://www.disklessworkstations.com/</li>
</ul>

<h2 id="thin-clients-designed-for-citrix">Thin clients designed for Citrix</h2>

<p>I have had mixed success with thin clients that were designed for Citrix and/or Windows Terminal Services.  The Wyse terminals tend to be very sluggish and quirky, and I find that I cannot recommend them for LTSP.</p>

<p>HP thin clients seem to work very much better, and are certainly an option.  Such devices tend to be very low power.  On the downside, they do tend to be surprisingly expensive, for what they provide.  That said, if you have a good hardware budget, I believe you could do very much worse than buy some HP Linux Thin Clients but, as with any client hardware, do buy one and test before committing yourself to considerable expenditure.</p>

<h2 id="barebones-pcs">Barebones PCs</h2>

<p>Obviously the above is probably not true of dedicated LTSP thin client hardware, designed from the ground up to work with LTSP.</p>

<p>I have found that the best client hardware is to purchase low-cost barebones PCs, low-power and preferably fanless.  I tend to only buy barebones PCs that include the CPU, in order to keep down the overall cost and keep commissioning time to a minimum.  Previously this meant Via C7 CPUs, which haven’t the best reputation; although so far I have not had any failures.  Nowadays I think you’d be searching for “intel atom barebones”.</p>

<p>Yes, you need to open the case, add some RAM, and maybe add an optical drive - perhaps 10 minutes work - the flipside is that you’re not paying for an operating system, and you’re not paying for a hard drive (which you don’t need).</p>

<p>Such barebones PCs currently cost about £125 (plus VAT), seem much less likely to have compatibility issues, perform much faster than dedicated “thin client” devices, and could easily be changed to fat clients, should your requirements subsequently change.</p>

<h2 id="self-build-pcs">Self-build PCs</h2>

<p>I have had great success building small Mini-ITX form factor PCs, on Via CPUs.  The hardware was all purchased from <a href="http://linitx.com">LinITX.com</a>, who I found very helpful.  Build time was about an hour for the first, but this dropped to about 30 minutes for the remaining ones.  The result are stunningly attractive tiny PCs which grace our showroom.  Just do concentrate on low-power consumption and look where possible for “fanless”.  LTSP uses very little of the local CPU, so heat is unlikely to be an issue.</p>

<h2 id="new-pcs">New PCs</h2>

<p>Full blown desktops are, I think, a poor option.  These tend to be power hungry, and come with a Windows licence, hard drive and other bits that you will not need.  There are a new generation of tiny PCs like the Acer Reevo and the Asus EeeBox, which may be a good option.</p>

<h2 id="references">References</h2>

<p>There are no references for this page, which was written without reference to other information.</p>

       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP5 Troubleshooting</title>
      <link>https://chrisjrob.com/2010/04/21/ltsp5-troubleshooting/</link>
      <pubDate>Wed, 21 Apr 2010 08:16:24 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2010/04/21/ltsp5-troubleshooting</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <h2 id="job-control-turned-off-nbd0-not-found">Job control turned off nbd0 not found</h2>

<p><strong>These instructions do not apply for Ubuntu.</strong></p>

<p>If you receive an error message stating initramfs “job control turned off”, then look further up for a line stating that <code class="language-plaintext highlighter-rouge">/path/to/nbd0</code> not found.  If you’re on Debian then this is an indication that the client is trying to boot via NBD instead of NFS.  Check the following:</p>

<p>Firstly, see if there is a directory <code class="language-plaintext highlighter-rouge">/opt/ltsp/i386/images</code>, this is the default directory for the ltsp-update-image generated unionfs files.  If it exists you should probably delete it, reboot the client and all may be well.</p>

<!--more-->

<p>If not, then on the server, use the chroot command to maintain the LTSP chroot:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo chroot /opt/ltsp/i386
</code></pre></div></div>

<p>Now edit <code class="language-plaintext highlighter-rouge">/etc/default/ltsp-client-setup</code> and change the value of the <code class="language-plaintext highlighter-rouge">root_write_method</code> variable to use <code class="language-plaintext highlighter-rouge">bind mounts</code> instead of <code class="language-plaintext highlighter-rouge">unionfs</code>, it should look like this afterwards:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>root_write_method="bind_mounts"
</code></pre></div></div>

<p>Next, create the file <code class="language-plaintext highlighter-rouge">/etc/initramfs-tools/conf.d/ltsp</code> and add the following line (set the value of the BOOT variable to nfs):</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>BOOT=nfs
</code></pre></div></div>

<p>Regenerate the initramfs:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>update-initramfs -u
</code></pre></div></div>

<p>Hit CTRL-D to exit the chroot now. Make sure LTSP uses the new initramfs to boot:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo ltsp-update-kernels
</code></pre></div></div>

<h2 id="clients-cannot-login-via-ldm">Clients cannot login via LDM</h2>

<p>If your clients get to the LDM login page, but none of them can login, and particularly if you are aware of recent updates affecting ssh, then:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo ltsp-update-sshkeys
$ sudo ltsp-update-image  (skip this for debian*)
</code></pre></div></div>

<p>*It is important that you do not ltsp-update-image for debian (unless you have moved to nbd in which case you presumably know what you are doing), if you do, then you are likely to find that the client will attempt to boot from the generated image.</p>

<p>See https://bugs.launchpad.net/ubuntu/+source/ltsp/+bug/144296  for more details (which may not be relevant for Debian).</p>

<h2 id="no-client-sound">No client sound</h2>

<p>See <a href="/2009/05/06/ltsp5-sound-client/">LTSP5 Client Sound</a>.</p>

<h2 id="display-problems">Display Problems</h2>

<p>See <a href="/2010/07/06/ltsp5-display-troubleshooting/">LTSP5 Display Troubleshooting</a>.</p>

<h2 id="client-has-loud-hissing-noise">Client has loud hissing noise</h2>

<p>The microphone has likely been activated by default.  With normal PCs the user fixes the problem once and that fix it remembered, with LTSP the problem repeats on every boot.  The solution is to mute the microphone on every boot.  To achieve this we need to login to the client shell and run “alsamixer” to mute the microphone.  Silence, ah bliss.  Take a note of the name of the microphone audio channel.  The amixer program is also very helpful - see <a href="/2009/05/06/ltsp5-sound-client/">LTSP5 Client Sound</a> for details of how to use this.</p>

<p>Next set the volume on this channel in lts.conf:</p>

<p>Volume parameters take the form of:</p>

<p><code class="language-plaintext highlighter-rouge">"channel_name"_VOLUME</code>, where “channel_name” is the name of the audio channel (you can find audio channel names by running alsamixer or “amixer -c0 scontrols” at a client shell) with unfriendly variable characters replaced or removed. In other words, forward slashes, hyphens, and spaces are replaced by underscores, and anything in parentheses is dropped completely.</p>

<p>So, if you have a channel called “Front Mic”, then FRONT_MIC_VOLUME should already work with no need for special scripts.</p>

<p>Thanks to Gadi for explaining this on the LTSP mailing list.</p>

<h2 id="ldm-only-prompts-for-password-on-login-failure">LDM only prompts for password on login failure</h2>

<p>Login window asks for Username and then Password.  But, if you enter the username incorrectly then it says “Password incorrect. Try again.”.  Of course, no password will work because the username is wrong.</p>

<p>Edit <code class="language-plaintext highlighter-rouge">/opt/ltsp/i386/etc/ssh/ssh_config</code> and add this line to the bottom:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>NumberOfPasswordPrompts 1
</code></pre></div></div>

<p>Then for Ubuntu or NBD setups (not Debian) run:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo ltsp-update-image
</code></pre></div></div>

<p>Then reboot your thin client.</p>

<p>Credit to Gavin McCullagh from the Edubuntu mailing list for this workaround (<a href="https://lists.ubuntu.com/archives/edubuntu-users/2007-November/002636.html">read more</a>).</p>

<h2 id="ldm-password-expiry-loop">LDM password expiry loop</h2>

<p>There is an odd loop that arises with the LDM password expiry process:</p>

<ul>
  <li>User enters username and hits enter</li>
  <li>User enters password and hits enter</li>
  <li>LDM tells user password has expired enter new password</li>
  <li>User enters new password and hits enter</li>
  <li>LDM tells user to verify password</li>
  <li>User enters new password again and hits enter</li>
</ul>

<p>It seems that after this process it always returns “No response from server”, and usually logging in with your the password will work just fine.  Unfortunately the error leads people to think that the password change has failed and they seem unable to resolve the problem.</p>

<p>But on other occasions, typing the new password does not work, but it is possible that the operator set the password incorrectly.</p>

<p>If there is a bug, it may be related to the following thread:</p>

<ul>
  <li><a href="http://marc.info/?t=121069447400001&amp;r=1&amp;w=2">ldm problems with debian etch</a></li>
</ul>

<h2 id="ldm-login-screen-shows-white-background">LDM login screen shows white background</h2>

<p>In Debian Etch, the LDM login screen shows a white background with an ugly LTSP logo in the middle.  Actually the background is a light grey, but people describe it as white.  The LTSP logo was not designed to work with a light grey background, and that’s the reason it looks so ugly.  This problem has been fixed in Debian Lenny, and you should now upgrade from Etch.</p>

<p>No known workaround at this time, but see <a href="/ltsp/create-a-custom-ldm-theme/">How to Create a custom LDM theme</a> for details of how to change the logo, which really is the only issue with the grey background.</p>

<h2 id="ltspfs-mounts-appear-strange-when-running-df">LTSPFS mounts appear strange when running df</h2>

<p>util-linux 2.13 fixed this bug; however it is still present in etch. workaround is to make <code class="language-plaintext highlighter-rouge">/etc/mtab</code> a symlink to <code class="language-plaintext highlighter-rouge">/proc/mounts</code>:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># mv /etc/mtab /etc/mtab.old
# ln -s /proc/mounts /etc/mtab
</code></pre></div></div>

<h2 id="ltsp-client-hostname-displays-as-none">LTSP client hostname displays as (none)</h2>

<p>Workaround set up dns on the thin-client network, or:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># mv /etc/mtab /etc/mtab.old
# ln -s /proc/mounts /etc/mtab
</code></pre></div></div>

<h2 id="ldm-support-for-mostly-insecure-logins-ldm_directx">LDM support for mostly insecure logins (LDM_DIRECTX)</h2>

<p>Requires getting /root to be writeable:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># echo 'copy_dirs="$copy_dirs /root"' &gt;&gt;/opt/ltsp/i386/etc/default/ltsp-client-setup
</code></pre></div></div>

<h2 id="kde-local-device-icons-on-desktop">KDE local device icons on desktop</h2>

<p>In KDE there may not be any local device icons appearing on the desktop.  If you find this to be the case, but the device does exist under <code class="language-plaintext highlighter-rouge">/media</code>, then you may need to script <code class="language-plaintext highlighter-rouge">/usr/sbin/ltspfsmounter</code> code to create symlinks on <code class="language-plaintext highlighter-rouge">~/Desktop</code>.</p>

<h2 id="x-configuration">X Configuration</h2>

<p>If X doesn’t automatically configure properly (it uses X.org’s built-in configuration, which doesn’t work as well on the version on X.org in etch), you may want to switch back to the slower but more reliable X configuration using xdebconfigurator:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># chroot /opt/ltsp/i386 apt-get install xdebconfigurator
# cp /opt/ltsp/i386/usr/share/doc/ltsp-client-core/examples/configure-x-xdebconfigurator.gz /opt/ltsp/i386/etc/
# gunzip /opt/ltsp/i386/etc/configure-x-xdebconfigurator.gz
# chmod +x /opt/ltsp/i386/etc/configure-x-xdebconfigurator
# echo CONFIGURE_X_COMMAND=/etc/configure-x-xdebconfigurator &gt;&gt; /opt/ltsp/i386/etc/lts.conf
# echo 'copy_dirs="$copy_dirs /var/cache/debconf"' &gt;&gt; /opt/ltsp/i386/etc/default/ltsp-client-setup
# echo 'temp_copy_dirs=" "' &gt;&gt; /opt/ltsp/i386/etc/default/ltsp-client-setup
</code></pre></div></div>

       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP5 Install</title>
      <link>https://chrisjrob.com/2010/03/30/ltsp5-install/</link>
      <pubDate>Tue, 30 Mar 2010 09:55:14 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2010/03/30/ltsp5-install</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <h2 id="introduction">Introduction</h2>

<p>Time to install a new server - yay!  The hardware is an HP Proliant DL360 G5, with a single quad-core processor and 4GB ram.  This page is about creating a complete desktop server and, as such, much of this is actually nothing to do with LTSP, but is all about setting up a functional and attractive desktop server.</p>

<h2 id="server-specification">Server Specification</h2>

<!--more-->

<p>The following page, which I wrote for LTSP4.2, should largely hold true:</p>

<ul>
  <li><a href="/2010/02/15/ltsp-server-sizing/">Server Sizing</a></li>
</ul>

<h2 id="server-set-up">Server Set-up</h2>

<p>Physically install the server and plug the network into a Gigabit port on your network switch and install your disk drives and configure your RAID volume.</p>

<h2 id="debian-base-install">Debian Base Install</h2>

<p>Download the netinst ISO from Debian.  Burn the ISO to disk.  Insert the disk into the optical drive of your server and boot.  Follow the installer prompts, until you get to the section on partitioning.</p>

<h2 id="partitioning">Partitioning</h2>

<p>There is no way that I can tell you what to do here - there are just too many variables - but here is what I did:</p>

<p>In addition to the following, you will need to create a swap partition which should be roughly equal to your RAM.  Opinions do differ on this point, and if you have plenty of RAM, then you should be able to have a much smaller swap partition, perhaps only 1 GB.  For low-memory systems, you should probably create a swap partition that is much larger than your RAM, but expect the performance to suffer as a result!  Server based systems should be given adequate RAM, and the swap should really only be used occasionally.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/cciss/c0d0p5       885436    150672    689784  18% /
/dev/cciss/c0d0p1        85528     28829     52283  36% /boot
/dev/cciss/c0d0p2        85549      5664     75468   7% /rescue
/dev/cciss/c0d0p6     48062440    184344  45436620   1% /home
/dev/cciss/c0d0p7     48062440    184324  45436640   1% /opt
/dev/cciss/c0d0p8     28834716    176200  27193792   1% /srv
/dev/cciss/c0d0p11     2529920     69384   2332020   3% /tmp
/dev/cciss/c0d0p9      6728280    293660   6092840   5% /usr
/dev/cciss/c0d0p10     2885780    256356   2482836  10% /var
</code></pre></div></div>

<p>With an LTSP system it is sensible to have a separate <code class="language-plaintext highlighter-rouge">/opt</code> partition; it doesn’t need to be as large as this, but I choose to use <code class="language-plaintext highlighter-rouge">/opt</code> for my virtual machines, 10GB should be adequate.  On servers it is sensible to have separate <code class="language-plaintext highlighter-rouge">/usr</code>, <code class="language-plaintext highlighter-rouge">/var</code> and <code class="language-plaintext highlighter-rouge">/tmp</code> file systems.  The <code class="language-plaintext highlighter-rouge">/srv</code> is simply going to be for shared documents - so your requirements may be different - perhaps you have a NAS for that purpose.  A separate <code class="language-plaintext highlighter-rouge">/home</code> is recommended for all systems.  The <code class="language-plaintext highlighter-rouge">/tmp</code> partition here is HUGE, this is because I will be installing a virtualised Windows server using KVM in snapshot mode, which uses <code class="language-plaintext highlighter-rouge">/tmp</code> for working files; you should be able to get away with 0.5GB.  Lastly the <code class="language-plaintext highlighter-rouge">/rescue</code> partition is optional, it should be a mirrored copy of <code class="language-plaintext highlighter-rouge">/boot</code> and then should be removed from <code class="language-plaintext highlighter-rouge">/etc/fstab</code>, as a rescue partition.</p>

<h2 id="installing-debian">Installing Debian</h2>

<p>My personal preference is to install a base system only, unchecking even the “Standard system” when prompted.  This leaves you with a perfectly working system on which to build your LTSP server.  Follow the prompts to remove the install CD and reboot.</p>

<h2 id="install-openssh-server-and-screen">Install OpenSSH Server and Screen</h2>

<p>These packages make it easy to remotely administer your server, openssh creates the connection, screen enables you to use multiple terminals and to disconnect and reconnect to each (<a href="http://www.kuro5hin.org/story/2004/3/9/16838/14935">Simple Tutorial</a>).  Screen is optional but recommended, this tutorial will make no further mention of it, you should just use it as appropriate, or if you don’t wish to use it, simply remove it from the following command.</p>

<p>Log into the server as root and install openssh:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># apt-get install openssh-server screen
</code></pre></div></div>

<p>You may need to create some static routes in <code class="language-plaintext highlighter-rouge">/etc/network/interfaces</code>, depending from where you will be ssh’ing.</p>

<p>Return to the comfort of your workstation and ssh into the server in the usual way (this isn’t a tutorial on ssh!).</p>

<h2 id="install-k-desktop-environment-kde">Install K Desktop Environment (KDE)</h2>

<p>We use KDE, so these instructions are specific to KDE; however you can simply change the install command below according to the desktop environment that you prefer.</p>

<p>N.B. Note that I am installing the minimum software, if you prefer to have KDE in total, then just install <code class="language-plaintext highlighter-rouge">kde-desktop</code> instead of <code class="language-plaintext highlighter-rouge">kde-core kdm</code>.</p>

<p>N.B. Change <code class="language-plaintext highlighter-rouge">kde-i18n-engbi</code> for the correct package for your language.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># apt-get install kde-core kdm kde-i18n-engb
</code></pre></div></div>

<p>N.B. Even installing a base KDE will result in a large number of packages being downloaded, go get yourself a cup of coffee.</p>

<h2 id="reboot">Reboot</h2>

<p>Now reboot the server, and ensure that you get a graphical login on the console.</p>

<h2 id="install-ltsp">Install LTSP</h2>

<p>N.B. Please read the <a href="http://wiki.debian.org/LTSP/Howto">Debian LTSP Howto</a> before continuing.</p>

<p>N.B. Please note that there are now <a href="http://wiki.debian.org/LTSP/Howto/Lenny-With-Backports">lenny-backports</a> available.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># apt-get install ltsp-server-standalone
</code></pre></div></div>

<p>You can safely ignore the error message about DHCP server not being “authoritative”, and don’t worry that your DHCP server doesn’t start - you need to configure it before it will start cleanly.</p>

<h2 id="build-ltsp-client">Build LTSP Client</h2>

<p>N.B. Please note that there are now <a href="http://wiki.debian.org/LTSP/Howto/Lenny-With-Backports">lenny-backports</a> available.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ltsp-build-client
</code></pre></div></div>

<p>The <a href="/2010/03/30/ltsp-build-client/">ltsp-build-client</a> command will download a complete Debian filesystem into <code class="language-plaintext highlighter-rouge">/opt/ltsp/i386</code> (or specify an alternate location with ‘–base’) and install the ltsp-client and ldm packages (the LTSP Display Manager).</p>

<p>N.B. If you change the IP data after you have done the initial setup and run <a href="/2010/03/30/ltsp-update-ssh-keys/">ltsp-update-sshkeys</a> on the server.</p>

<p>N.B. The files the client will boot are installed on the server into <code class="language-plaintext highlighter-rouge">/var/lib/tftpboot</code>, unlike LTSP4.2 which installed in <code class="language-plaintext highlighter-rouge">/tftpboot</code>.</p>

<h2 id="set-up-nfs-share">Set-up NFS Share</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ nano /etc/exports
/opt/ltsp       *(ro,no_root_squash,async,no_subtree_check)
$ invoke-rc.d nfs-kernel-server reload
</code></pre></div></div>

<p>The 2 ltsp configuration files inside the client are <code class="language-plaintext highlighter-rouge">/etc/lts.conf</code> and <code class="language-plaintext highlighter-rouge">/etc/default/ltsp-client-setup</code>. See the examples in <code class="language-plaintext highlighter-rouge">/usr/share/doc/ltsp-client*</code>. Also see the <a href="http://doc.ubuntu.com/edubuntu/edubuntu/handbook/C/customizing-thin-client.html">Edubuntu wiki</a>.</p>

<h2 id="configure-dhcp-server">Configure DHCP Server</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># cp /etc/dhcp3/dhcpd.conf /etc/dhcp3/dhcpd.conf.lenny
# cp /etc/ltsp/dhcpd.conf /etc/dhcp3/
# nano /etc/dhcp3/dhcpd.conf
</code></pre></div></div>

<p>Edit <code class="language-plaintext highlighter-rouge">/etc/dhcp3/dhcpd.conf</code>, updating the IP addresses according for your network.</p>

<h2 id="test-client-boot">Test Client Boot</h2>

<p>Now is the time to test that your client is booting okay.</p>

<h2 id="audio-set-up">Audio Set-up</h2>

<p>Next we need to set-up the audio, and to that end please follow the instructions on our LTSP5 Sound page:</p>

<ul>
  <li><a href="/2009/04/30/ltsp5-sound/">LTSP5 Sound</a></li>
</ul>

<h2 id="local-devices-set-up">Local Devices Set-up</h2>

<p>Next we need to set-up local devices, and to that end please follow the instructions on our LTSP5 Local Devices page:</p>

<ul>
  <li><a href="/2010/11/19/ltsp5-local-devices/">LTSP5 Local Devices</a></li>
</ul>

<h2 id="optional---installing-freenx">Optional - Installing FreeNX</h2>

<p>If you wish to be able to remotely support your server with a GUI, then you may like to install freeNX:</p>

<ul>
  <li><a href="/howto/install-freenx/">Install FreeNX</a></li>
</ul>

<p>Then visit the NoMachine website and download the client for your PC.</p>

<h2 id="optional---kde-style-changes">Optional - KDE Style Changes</h2>

<p>N.B. These instructions will increase server load, but do make KDE look a great deal more attractive - your choice.</p>

<p>I apologise in advance for this section; I know that “Bling” has no place on a server, but equally I know that getting Linux adopted in your workplace is tough, and a little bling goes a long way towards user acceptance.  Unfortunately these changes WILL increase the load on the server, if you are not happy with this, then simply skip this section.</p>

<h3 id="crystal-windows-decoration">Crystal Windows Decoration</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># apt-get install kwin-style-crystal
</code></pre></div></div>

<p>Go to the KDE Control Panel, Appearance &amp; Themes and change the Windows Decorations to Crystal.  Then, under the General tab, make the top corners rounded, and increase the titlebar size to 21.  Under the Buttons tab, change the buttons to Kubuntu-Edgy.  Under the Background tab, I suggest you switch off transparency, which will but an unnecessary load on the server.  Under the Overlay tab, change both active and inactive to Simple Lighting.</p>

<h3 id="nuovext">NuoveXT</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># apt-get install kde-icons-nuovext
</code></pre></div></div>

<p>Go to the KDE Control Panel, Appearance &amp; Themes and change the Icons to nuoveXT.  Under the Advanced tab you may like to increase the Desktop icon size to 48, which suits these icons.</p>

<h3 id="desktop-background">Desktop Background</h3>

<p>I believe one of the most attractive backgrounds is a simple two colour elliptic gradient.  To achieve this, simply go to KDE Control Panel, Appearance &amp; Themes, Background. Change the Background picture to “No Picture” and set colours to Elliptic Gradient.  You can choose any two colours, but these two look good:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>#2E3B4E
#7698CA
</code></pre></div></div>

<p>Other colours may not go well with the rest of my suggested changes.</p>

<h3 id="panel">Panel</h3>

<p>The default panel doesn’t look that great, you can download any number of Kicker Wallpapers from KDE Look, but one that I think looks very good is this one:</p>

<ul>
  <li><a href="http://www.kde-look.org/content/show.php/Apple-like+kickers+background?content=88147">Apple-like Kicker Wallpaper</a></li>
</ul>

<p>It looks plain on that page, but much better in KDE.</p>

<h2 id="add-debian-multimedia-repository">Add Debian Multimedia Repository</h2>

<p>The Debian Multimedia is a useful resource for multimedia codecs, converters and players.  In particularly it includes Adobe Flash Player.  This is not an official repository, although it is a very common one.  I have decided to take the risk of installing this software on my system, you may not agree!</p>

<p>Edit <code class="language-plaintext highlighter-rouge">/etc/apt/sources.list</code> and add the following repository:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>deb http://www.debian-multimedia.org lenny main
</code></pre></div></div>

<p>Download and install the following:</p>

<ul>
  <li><a href="http://www.debian-multimedia.org/pool/main/d/debian-multimedia-keyring/debian-multimedia-keyring_2008.10.16_all.deb">debian-multimedia.org keyring</a></li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># dpkg -i debian-multimedia-keyring_2008.10.16_all.deb
# aptitude update
</code></pre></div></div>

<h2 id="optional---iceweasel">Optional - Iceweasel</h2>

<p>In my opinion, Konqueror, whilst an amazing piece of software, is not going to be suitable as your main web-browser.  Mozilla Firefox is the answer, and this is available in the Lenny repositories, named “Iceweasel”.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># apt-get install iceweasel icedtea-gcjwebplugin flashplayer-mozilla mozilla-acroread mozilla-mplayer
</code></pre></div></div>

<p>Unfortunately, being a GTK application (not native to KDE) it looks ghastly, so…</p>

<h2 id="optional---gtk-applications-in-kde">Optional - GTK Applications in KDE</h2>

<p>GTK applications in KDE always look horrible. In Kubuntu this is taken care of for you, but in Debian it is only a quick install away:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># apt-get install gtk-qt-engine
</code></pre></div></div>

<p>There are other ways of achieving this, e.g. qtcurve, but for me this seems perfectly satisfactory. Having installed, you visit your control panel and you will find a new option under “Appearance &amp; Themes” called “GTK Styles and Fonts” change this to use your KDE style for your GTK applications, and restart KDE.</p>

<h2 id="optional---other-applications">Optional - Other Applications</h2>

<p>Applications you might consider installing for your users are:</p>

<ul>
  <li><strong>KUser</strong> : <code class="language-plaintext highlighter-rouge">apt-get install kuser</code></li>
  <li><strong>The Gimp</strong> : <code class="language-plaintext highlighter-rouge">apt-get install gimp gimp-help-en gimp-data-extras</code></li>
  <li><strong>Inkscape</strong> : <code class="language-plaintext highlighter-rouge">apt-get install inkscape</code></li>
  <li><strong>Scribus</strong> : <code class="language-plaintext highlighter-rouge">apt-get install scribus-ng scribus-ng-doc scribus-template</code> (Development branch, but more up-to-date than “scribus”)</li>
  <li><strong>OpenOffice</strong> : <code class="language-plaintext highlighter-rouge">apt-get install openoffice.org-kde openoffice.org-help-en-gb openoffice.org-l10n-en-gb openclipart-openoffice.org</code></li>
  <li><strong>Freemind</strong> : <code class="language-plaintext highlighter-rouge">apt-get install freemind</code></li>
  <li><strong>KCalc</strong> : <code class="language-plaintext highlighter-rouge">apt-get install kcalc</code></li>
  <li><strong>Microsoft Fonts</strong> : <code class="language-plaintext highlighter-rouge">apt-get install ttf-mscorefonts-installer</code></li>
  <li><strong>KeePassX</strong> : <code class="language-plaintext highlighter-rouge">apt-get install keepassx</code></li>
  <li><strong>Unison</strong> : <code class="language-plaintext highlighter-rouge">apt-get install unison unison-gtk</code></li>
  <li><strong>Wine</strong> : <code class="language-plaintext highlighter-rouge">apt-get install wine wine-utils</code></li>
  <li><strong>Kontact</strong> : <code class="language-plaintext highlighter-rouge">apt-get install kontact</code></li>
  <li><strong>Ark</strong> : <code class="language-plaintext highlighter-rouge">apt-get install ark</code></li>
  <li><strong>Dia</strong> : <code class="language-plaintext highlighter-rouge">apt-get install dia</code></li>
</ul>

<h2 id="optional---install-kvm-virtualisation">Optional - Install KVM Virtualisation</h2>

<p>If you intend adding a virtualised Windows server on top of the LTSP server (not recommended - but we do it and it works well), then you need KVM (or an alternative) installed:</p>

<p>N.B. I suggest you right-click on the following link and Open in New Tab, so that you don’t lose your place in this document.</p>

<ul>
  <li><a href="/howto/install-kvm/">How to install KVM</a></li>
</ul>

<h2 id="optional---umask">Optional - UMask</h2>

<p>I dislike that every created file is given read access to all users, to change this behaviour we need to change <code class="language-plaintext highlighter-rouge">umask</code>.  In KDE the easiest way to achieve this system wide is by editing <code class="language-plaintext highlighter-rouge">/etc/profile</code> and changing the umask line from the default line of <code class="language-plaintext highlighter-rouge">umask 022</code> to your preferred setting.  We use <code class="language-plaintext highlighter-rouge">umask 007</code>, which gives full access to the user and group, but no access to other.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Default permissions umask 022: -rw-r--r--
New permissions     umask 007: -rw-rw----
</code></pre></div></div>

<p>Your view may well vary from mine.</p>

<h2 id="set-client-root-password">Set Client Root Password</h2>

<p>You will almost certainly need access to the client, in order to troubleshoot:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># chroot /opt/ltsp/i386
# passwd root
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
# exit
exit
# ltsp-update-image
</code></pre></div></div>

<h2 id="references">References</h2>

<ul>
  <li><a href="http://wiki.debian.org/LTSP">Debian LTSP</a>
    <ul>
      <li><a href="http://wiki.debian.org/LTSP/Howto">Debian Lenny Howto</a></li>
      <li><a href="http://wiki.debian.org/LTSP/Howto/Lenny-With-Backports">Debian Lenny Backports Howto</a></li>
    </ul>
  </li>
  <li><a href="ftp://ftp.hp.com/pub/softlib2/software1/pubsw-linux/p1538177301/v45350/Debian-5.0-lenny-readme.pdf">HP Proliant Debian Lenny Installation Instructions by HP</a> <a href="http://h71028.www7.hp.com/enterprise/downloads/Debian-5.0-lenny-readme.pdf">Alternative link</a></li>
  <li><a href="http://www.gnu.org/software/screen/manual/screen.html">GNU Screen Manual</a>
    <ul>
      <li><a href="http://www.kuro5hin.org/story/2004/3/9/16838/14935">Simple Tutorial</a></li>
    </ul>
  </li>
  <li><a href="http://linuxmafia.com/~karsten/Linux/FAQs/partition.html">Linux Partitioning mini-FAQ</a></li>
  <li><a href="http://pkg-kde.alioth.debian.org/kde3.html">Installing KDE</a></li>
  <li><a href="http://www.debianadmin.com/how-to-install-adobe-flash-in-debian-etchlennysid.html">Installing Adobe Flash in Debian</a></li>
  <li><a href="https://help.ubuntu.com/community/ThinClientHowto">Ubuntu Thin Client Howto</a></li>
</ul>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | Create a Custom LDM Theme</title>
      <link>https://chrisjrob.com/2010/03/30/ltsp-create-a-custom-ldm-theme/</link>
      <pubDate>Tue, 30 Mar 2010 09:32:32 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2010/03/30/ltsp-create-a-custom-ldm-theme</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <h2 id="paths">Paths</h2>

<p>The ldm-theme is loaded from a symlink at:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/opt/ltsp/i386/usr/share/ldm/themes/default
</code></pre></div></div>

<!--more-->

<p>Which points to further symlink at:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/opt/ltsp/i386/etc/alternatives/ldm-theme
</code></pre></div></div>

<p>Which points back to :</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/opt/ltsp/i386/usr/share/ldm/themes/ltsp
</code></pre></div></div>

<h2 id="copy-existing-theme">Copy existing theme</h2>

<p>Copy this ltsp directory, e.g.:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># cd /opt/ltsp/i386/usr/share/ldm/themes
# cp -r ltsp custom
# cd custom
# ls -al
</code></pre></div></div>

<h2 id="set-symlink-to-new-theme">Set symlink to new theme</h2>

<p>Then you need to change the symlink to point to your new theme:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># cd /opt/ltsp/i386/etc/alternatives
# rm ldm-theme
# ln -s /usr/share/ldm/themes/custom ldm-theme
</code></pre></div></div>

<h2 id="customise-your-custom-ldm-theme">Customise your custom LDM theme</h2>

<p>Now you can customise your ldm theme to your heart’s content.  Please note that editing the bg.png currently has no effect (hence the existence of this page!), but you can at least tidy up the login page by replacing the logo.png with something tidier than the current ltsp.org logo, which looks dreadful on the grey background (because of a transparency issue).</p>

<h3 id="change-background-colour">Change background colour</h3>

<p>Firstly change the background colour to your desired background colour (personally I quite like the light grey of “efebe7”), so left it like that.</p>

<p>You can change the colour of the background by opening the greeter-gtkrc in your theme and looking for the following line:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    bg[NORMAL]        = "#efebe7"
</code></pre></div></div>

<p>Change the colour for whatever colour you wish.  Under KDE you can use the KColorChooser for this purpose, or indeed the colour picker in Gimp.</p>

<h3 id="create-new-logo">Create new logo</h3>

<p>Next open your organisation’s logo in the Gimp (or whatever logo you wish to appear on LDM login).  Add a shadow (Script4u → Shadow → Drop Shadow), I would suggest making the X/Y offsets 0/0.  You can play with the radius and opacity to create the effect you desire.</p>

<p>Next create a new layer of the same colour as the background (e.g. efebe7 unless you changed it) and put that background at the bottom of the layers.  The gimp makes this easy by enabling you to key in the efebe7 in the colour picker.</p>

<p>Save the resulting image as logo.png into your custom ldm theme.</p>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP Update Kernels</title>
      <link>https://chrisjrob.com/2010/03/30/ltsp-update-kernels/</link>
      <pubDate>Tue, 30 Mar 2010 09:21:30 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2010/03/30/ltsp-update-kernels</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <h2 id="command">Command</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ltsp-update-kernels
</code></pre></div></div>

<h2 id="introduction">Introduction</h2>

<p>The ltsp-update-kernels script copies it into the chroot environment and automatically updates the symlinks for the boot loader in the process.</p>

<!--more-->

<p>ltsp-update-kernels updates the current client kernel by using the current kernel from the chroot and copying it to the tftpboot directory (<code class="language-plaintext highlighter-rouge">/var/lib/tftpboot/ltsp/i386/</code>).  It also copies the initramfs across and sets up the PXE linux boot files.</p>

<p>This command must be run each time the kernel changes in the chroot.  There should be no harm in running this command each time you update the chroot, just in case.</p>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP Update Image</title>
      <link>https://chrisjrob.com/2010/03/30/ltsp-update-image/</link>
      <pubDate>Tue, 30 Mar 2010 09:21:11 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2010/03/30/ltsp-update-image</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <h2 id="command">Command</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ltsp-update-image
</code></pre></div></div>

<h2 id="comment">Comment</h2>

<p>For systems that use NBD (not Debian), this command will create a client image from the contents of <code class="language-plaintext highlighter-rouge">/opt/ltsp/i386</code>, and store it in <code class="language-plaintext highlighter-rouge">/opt/ltsp/i386/images</code>.</p>

<p>Any change you make in the chroot will only take effect for the clients after you run ltsp-update-image.  As such, this is the command that you will run most often.</p>

<!--more-->

<p>As Debian uses NFS, this command is not necessary, unless you have chosen to change to NBD, in which case you presumably know that you are “different”.</p>

<p>If you are on Debian and you have a directory <code class="language-plaintext highlighter-rouge">/opt/ltsp/i386/images</code>, then this is likely to mean that you have run this command by mistake.  This may trigger the clients to attempt to use NBD, so you should probably remove this directory, or explicitly tell your clients to use NFS - see LTSP5 Troubleshooting for details.</p>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP Build Client</title>
      <link>https://chrisjrob.com/2010/03/30/ltsp-build-client/</link>
      <pubDate>Tue, 30 Mar 2010 09:20:54 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2010/03/30/ltsp-build-client</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <h2 id="command">Command</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ltsp-build-client
</code></pre></div></div>

<h2 id="introduction">Introduction</h2>

<p>The ltsp-build-client command will download a complete Debian filesystem into <code class="language-plaintext highlighter-rouge">/opt/ltsp/i386</code> (or specify an alternate location with <code class="language-plaintext highlighter-rouge">--base</code>) and install the ltsp-client and ldm (LTSP Display Manager) packages.  As such, you will probably only run this command the first time you install LTSP5.</p>

<!--more-->

<p>You should move <code class="language-plaintext highlighter-rouge">/opt/ltsp</code> to <code class="language-plaintext highlighter-rouge">/opt/ltsp_old</code> before you start.</p>

<h2 id="man-page">Man Page</h2>

<p>You should see the man page appropriate for your system, but the Debian Lenny man page current states:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ltsp-build-client(8)                                                                                                                                                                                               ltsp-build-client(8)

NAME
    ltsp-build-client - Builds an LTSP client system for use with the LTSP server

SYNOPSIS
    ltsp-build-client  &lt;options&gt;

DESCRIPTION
    ltsp-build-client  builds  an  ltsp client chroot using standard packages for use with the ltsp server.  This chroot installation  can be modified in a number of ways as outlined in the OPTIONS section.  If present, defaults
    will be read from the configuration file /etc/ltsp/ltsp-build-client.conf, and will be overridden by using the command line options. ltsp-build-client is usually run as the root  user.   Visit  http://www.ltsp.org  for  more
    information.

OPTIONS
    Not all options are available on all installations. For a complete list of available options, use the --help and --extra-help options.

    --arch arch
                Builds a chroot with the specified architecture. Must be a supported architecture of the distribution, and compatible with the host architecture.  Defaults vary by distribution.

    --base dir
                Sets the default path for the ltsp chroots to be installed into. Defaults to /opt/ltsp/.

    --chroot file
                Sets the default name for the ltsp chroot. Defaults to the architecture selected with --arch or the running architecture.

    --conf file
                Load configuration defaults from specified file. See CONFIG FILE below for more information.

    --dist distribution
                Distribution : Sets the distribution to be installed in the client chroot.  Defaults to the running distribution.

    --extra-help
                Displays all available commandline options.

    --help    Displays the ltsp-build-client help message.

    --mirror mirror_url
                Select the mirror to download packages from. file:/// and http:// URLs are supported.

CONFIG FILE
    ltsp-build-client will read a configuration file to override built-in defaults. the default location for this configuration file is /etc/ltsp/ltsp-build-client.conf, and can be specified with the --conf commandline option.

    values are NAME="VALUE" pairs, with # representing commented lines. most commandline options have an equivalent. an example Debian based system with an alternate base location, architecture, and distribution:

        # set alternate default location for ltsp chroot (--base)
        BASE="/srv/ltsp"
        # build an amd64 chroot by default (--arch)
        ARCH="amd64"
        # build a Debian sid environment (--dist)
        DIST="sid"

SEE ALSO
    ltsp-update-sshkeys(8), ltsp-update-kernels(8).

AVAILABILITY
    ltsp-build-client is part of ltsp package and the latest versions are available in source form from https://launchpad.net/products/ltsp.

MAN PAGE AUTHOR
    Peter Savage
    updated 2006, 2009 by Vagrant Cascadian
</code></pre></div></div>

       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP Update SSH Keys</title>
      <link>https://chrisjrob.com/2010/03/30/ltsp-update-ssh-keys/</link>
      <pubDate>Tue, 30 Mar 2010 09:20:24 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2010/03/30/ltsp-update-ssh-keys</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <h2 id="command">Command</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ltsp-update-sshkeys
</code></pre></div></div>

<h2 id="introduction">Introduction</h2>

<p>Secure Shell Handler or SSH is a network protocol that allows data to be exchanged using a secure channel between two computers.  LTSP uses it to enable secure communication between clients and the Server.  SSH uses public-key cryptography to authenticate the client, this command rebuilds the keys.</p>

<!--more-->

<p>You would run this command only at first install, or upon subsequent change of server IP addressing or DHCP or possibly hosts.  Basically if you get the “workstation not authorised” message, then you should run this command.</p>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP Client Upgrade</title>
      <link>https://chrisjrob.com/2010/03/06/ltsp-client-upgrade/</link>
      <pubDate>Sat, 06 Mar 2010 10:05:07 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2010/03/06/ltsp-client-upgrade</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <p>All the following commands are entered on the server.  Normally this would be having logged into your normal LTSP desktop and opened a terminal session, but it could equally be from an ssh session to the server.  The key thing is that you do not run these commands from a client shell, as the client system is read-only.</p>

<!--more-->

<p>These instructions are for Debian, Ubuntu users will also need to update the client image afterwards.</p>

<h2 id="step-by-step-process">Step by Step Process</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo chroot /opt/ltsp/i386
# mount -t proc /proc /proc
# mount -t sysfs sys /sys
# apt-get update
# apt-get upgrade
# umount sys
# umount /proc
# exit
$ sudo ltsp-update-kernels
</code></pre></div></div>

<p>The mount proc and mount sysfs commands are not always required, and can be omitted in many instances, but if in doubt I don’t believe they cause any harm.</p>

<p>The <a href="/2010/03/30/ltsp-update-kernels/">ltsp-update-kernels</a> command is only required if the client kernel has been upgraded, but again I don’t believe it causes any harm to run it unnecessarily.</p>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP Server Sizing</title>
      <link>https://chrisjrob.com/2010/02/15/ltsp-server-sizing/</link>
      <pubDate>Mon, 15 Feb 2010 15:09:47 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2010/02/15/ltsp-server-sizing</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <h2 id="ram">RAM</h2>

<p>LTSP website recommends 256mb for the core system plus 50mb per user:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Total RAM = 256mb + (25 users x 50mb)
          = 1506mb
</code></pre></div></div>

<p>However Edubuntu recommends a different formula:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Total RAM = 150mb x 25 users
          = 3750mb
</code></pre></div></div>

<p>We recommend you choose the greater of the two, and double-it if you can (see update below).</p>

<!--more-->

<h3 id="post-install-update">Post install update</h3>

<p>This memory has proved a little low, mainly because we are also virtualising Windows on the same server.  If you don’t require Windows, or you are providing that service from a different server, then the higher of these two figures should be sufficient; I would certainly recommend the higher figure, because of the high memory demands of Firefox and Adobe Flash.</p>

<h2 id="cpu">CPU</h2>

<p>LTSP website states that each user is likely to require around 3% of a CPU:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Total CPU = 3% x 25
          = 0.75
          = 75% of a CPU
</code></pre></div></div>

<p>So a single processor should be sufficient; however this requirement doubles or even trebles if we opt to virtualise a Windows server on the installation.  We would say that a minimum of a quad-core would be sensible if virtualising Windows on the LTSP server.  If this is a problem for you, simply host the Windows server elsewhere; which is probably better anyway.</p>

<h3 id="post-install-update-1">Post install update</h3>

<p>We have now upgraded both servers to dual quad-core, which is proving ample capacity.  I believe a single quad-core would have been ample had we not been virtualising windows on the same server.</p>

<h2 id="network">Network</h2>

<p>LTSP recommend a Gigabit connection for the server and fast Ethernet for the terminals.  Many fast ethernet switches include a gigabit connection, alternatively gigabit switches are becoming quite affordable.</p>

<p><strong>There can be issues running LTSP via multiple switches - so if you’re buying a new switch - consider the greatest number of ports that you are likely to require.</strong></p>

<h3 id="post-install-update-2">Post install update</h3>

<p>This has all provided to be correct - Gigabit on the server is nearly essential if you want decent performance and similarly, PCs with only old 10-base-t internet are noticeably slower to boot.</p>

       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP5 Scanning</title>
      <link>https://chrisjrob.com/2009/11/18/ltsp5-scanning/</link>
      <pubDate>Wed, 18 Nov 2009 12:29:45 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2009/11/18/ltsp5-scanning</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <h2 id="scanning-with-ltsp-5-in-debian-etch-or-lenny">Scanning with LTSP 5 in Debian Etch or Lenny</h2>

<p>At the time of writing these instructions worked for Etch, but have not been completed for Lenny.</p>

<h2 id="introduction">Introduction</h2>

<p><strong>This is a description for a scanner physically connected to a terminal (not to the server).</strong></p>

<!--more-->

<p>For LTSP scanning to work, you just need to remember that the roles are reversed - that is the client is the scanning server and the server is the scanning client.  With the exception of the fact that you have to chroot to get at the client, the set-up is an ordinary Linux network scanning set-up.</p>

<h2 id="configure-client">Configure client</h2>

<h3 id="install-client-packages">Install client packages</h3>

<p>You have to be root in the chroot LTSP client environment for the next steps:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo chroot /opt/ltsp/i386
# mount -t proc /proc /proc
# mount -t sysfs sys /sys
# apt-get install libexif12 libgphoto2-2 libgphoto2-port0 libieee1284-3 libltdl3 libsane libsane-extras sane-utils
# umount sys
# umount /proc
</code></pre></div></div>

<h3 id="user-saned-needs-an-additional-group">User ‘saned’ needs an additional group:</h3>

<p>Still in the chroot:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># usermod -a -G scanner saned
</code></pre></div></div>

<h3 id="modify-etcinetdconf-etch">Modify <code class="language-plaintext highlighter-rouge">/etc/inetd.conf</code> (Etch)</h3>

<p>Still in the chroot, open <code class="language-plaintext highlighter-rouge">/etc/inetd.conf</code> (e.g. with vi) and add at the end of the file (after ‘#:OTHER: Other services’) this line:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sane-port stream tcp nowait saned.saned /usr/sbin/saned saned
</code></pre></div></div>

<h3 id="modify-etcdefaultsaned-lenny">Modify <code class="language-plaintext highlighter-rouge">/etc/default/saned</code> (Lenny)</h3>

<p>The problem with this is that it will run for all users, which seems a bit pointless, should be possible to use an ldm rc.d script, but this did not work correctly for me.</p>

<p>Still in the chroot, open <code class="language-plaintext highlighter-rouge">/etc/default/saned</code> and change <code class="language-plaintext highlighter-rouge">RUN=no</code> to <code class="language-plaintext highlighter-rouge">RUN=yes</code>.</p>

<p>On an upgraded server, this was not enough, I also needed to symlink:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># cd /etc/rc2.d
# ln -s ../init.d/saned S99saned
</code></pre></div></div>

<h3 id="the-initial-openbsd-inetd-links-are-wrong-etch">The initial openbsd-inetd links are wrong. (Etch)</h3>

<p>Still in the chroot, Delete openbsd-inetd links  with:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># rm /etc/rc*/*openbsd*
</code></pre></div></div>

<p>Create new one’s:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># ln -s ../init.d/openbsd-inetd /etc/rc2.d/S20openbsd-inetd
# ln -s ../init.d/openbsd-inetd /etc/rc3.d/S20openbsd-inetd
# ln -s ../init.d/openbsd-inetd /etc/rc4.d/S20openbsd-inetd
# ln -s ../init.d/openbsd-inetd /etc/rc5.d/S20openbsd-inetd
# ln -s ../init.d/openbsd-inetd /etc/rc0.d/K20openbsd-inetd
# ln -s ../init.d/openbsd-inetd /etc/rc1.d/K20openbsd-inetd
# ln -s ../init.d/openbsd-inetd /etc/rc6.d/K20openbsd-inetd
</code></pre></div></div>

<p>Check if everything is fine:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># ls -l /etc/rc*/*openbsd*
</code></pre></div></div>

<h3 id="leave-chroot">Leave chroot</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># exit or [Ctrl]+[d]
</code></pre></div></div>

<h2 id="configure-server">Configure server</h2>

<h3 id="install-server-packages">Install server packages</h3>

<p>Thanks to the Debian package system it’s easy to get almost all software (as root):</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># apt-get install libsane libsane-extras sane-utils
</code></pre></div></div>

<h3 id="set-user-grants">Set user grants</h3>

<p>You have to set the saned group for every scanner user:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># usermod -a -G saned ~username~
</code></pre></div></div>

<h3 id="sanedconf-configuration-client">saned.conf Configuration (client)</h3>

<p>Modify the saned.conf file. Put the IP address of your server, e.g.:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/opt/ltsp/i386/etc/sane.d/saned.conf

#
# saned.conf
#
# The contents of the saned.conf  file  is  a  list  of  host  names,  IP
# addresses or IP subnets (CIDR notation) that are permitted to use local
# SANE devices. IPv6 addresses must be enclosed in brackets,  and  should
# always  be specified in their compressed form.
#
# The hostname matching is not case-sensitive.
#
~serverip~
</code></pre></div></div>

<h3 id="netconf-configuration-client">net.conf Configuration (client)</h3>

<p>Modify the net.conf file. Put the IP addresses &amp; names of your server, scanner terminal; client and localhost here, e.g.:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/opt/ltsp/i386/etc/sane.d/net.conf

# This is the net config file.  Each line names a host to attach to.
# If you list "localhost" then your backends can be accessed either
# directly or through the net backend.  Going through the net backend
# may be necessary to access devices that need special privileges.

localhost
~server-ip~
~server-hostname~
</code></pre></div></div>

<h3 id="modify-the-dllconf-client">Modify the dll.conf (client)</h3>

<p>Enable only two lines, one with ‘net’ and the other one with the name of your (!) scanner backend (for me: snapscan -&gt; works with Epson scanner).</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/opt/ltsp/i386/etc/sane.d/dll.conf

# enable the next line if you want to allow access through the network:
net
snapscan
#abaton
#agfafocus
#apple
#avision
#artec
#artec_eplus48u
#as6e
...
</code></pre></div></div>

<p>Here you find an overview of supported backends:</p>

<ul>
  <li>http://www.sane-project.org/sane-mfgs.html</li>
</ul>

<h3 id="modify-dllconf-server">Modify dll.conf (server)</h3>

<p>Modify dll.conf.  Enable only the line with ‘net’ (disable all others):</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/etc/sane.d/dll.conf

# enable the next line if you want to allow access through the network:
net
#abaton
#agfafocus
#apple
#avision
#artec
#artec_eplus48u
#as6e
...
</code></pre></div></div>

<h3 id="modify-netconf-server">Modify net.conf (server)</h3>

<p>Modify net.conf.  Put the IP address of your scanner terminal client (!) here, e.g.:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/etc/sane.d/net.conf

# This is the net config file.  Each line names a host to attach to.
# If you list "localhost" then your backends can be accessed either
# directly or through the net backend.  Going through the net backend
# may be necessary to access devices that need special privileges.
~client-ip~
</code></pre></div></div>

<p>Alternatively (and better in my opinion) is to script the scanner program, so that it starts with:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>SANE_NET_HOSTS=client-ip
export SANE_NET_HOSTS
scanimage &gt; test.pnm
</code></pre></div></div>

<p>See Alternative Configuration.</p>

<h2 id="restart-your-client-terminal">Restart your client terminal</h2>

<h2 id="restart-hplip-etch-only">Restart hplip (Etch only)</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo /etc/init.d/hplip restart
Stopping HP Linux Printing and Imaging System: hpiod hpssd.
Starting HP Linux Printing and Imaging System: hpiod hpssd.
</code></pre></div></div>

<h2 id="test">Test</h2>

<p>If it doesn’t work - take a look at your syslog.</p>

<h2 id="alternative-configuration">Alternative configuration</h2>

<p>If your client doesn’t have a static ip and hostname (as with the default ltsp set-up), then you can either configure <code class="language-plaintext highlighter-rouge">/etc/dhcp3/dhcpd.conf</code> to provide you with a static ip and hostname, or use this alternative scanner configuration.</p>

<h3 id="step-1-remove-all-client-references-above">Step 1: Remove all client references above</h3>

<p>Work back through the above configurations, commenting out all references to your client-ip and client-hostname.</p>

<h3 id="step-2-write-a-script">Step 2: Write a script</h3>

<p>Here is a simple test script to determine your client, and list your connected scanner:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>SANE_NET_HOSTS=`echo $SSH_CLIENT | cut -d " "  -f 1`
export SANE_NET_HOSTS
scanimage -L
</code></pre></div></div>

<p>You would need to modify this script to do something more useful with scanimage.</p>

<h2 id="references">References</h2>

<ul>
  <li>http://wiki.ltsp.org/twiki/bin/view/Ltsp/Debian#Scanning_with_LTSP_5_in_Debian_E</li>
  <li>http://wiki.ltsp.org/twiki/bin/view/Ltsp/Scanners</li>
  <li>http://www.enterprisenetworkingplanet.com/nethub/article.php/%203637076</li>
  <li>http://www.jumako.de/cms/index.php?option=com_content&amp;task=view&amp;id=26&amp;Itemid=31</li>
</ul>

       ]]>
      </description>
    </item>
    
    <item>
      <title>Building a new mailserver</title>
      <link>https://chrisjrob.com/2009/05/27/building-a-new-mailserver/</link>
      <pubDate>Wed, 27 May 2009 00:00:00 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2009/05/27/building-a-new-mailserver</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/debian_logo.png" align="right" alt="Featured Image">
         
         <p>Our Debian Lenny <a href="/2009/01/24/ltsp5-clean-install/">LTSP5 Install</a> has hit a road block: currently the site are using a Citrix server at another location over a 256k connection to pick up their emails.  I really didn’t feel that I could ask them all to collect their emails over a 256k connection, so what are the alternatives?</p>

<!--more-->

<p>Well I could upgrade the bandwidth by creating an inter-site VPN, but that will still only provide perhaps 600k (that being the upload bandwidth of the host site).  The solution is to move the mailserver onto the ‘net, so that they can benefit from a full 8mb ADSL download.</p>

<p>After seeking advice, I choose <a href="http://bytemark.co.uk">Bytemark</a> as a trusted Debian VPS supplier, a day later I had my login to my new virtual server.  But what to install?  Advice pointed me in the direction of Postfix and Dovecot, which were not much more than an apt-get install:</p>

<ul>
  <li><a href="http://www.debianadmin.com/debian-mail-server-setup-with-postfix-dovecot-sasl-squirrel-mail.html">Debian Admin Mailserver</a></li>
</ul>

<p>Great, a working mailserver, but the problem with the installation was that the users were local system accounts, which made it more cumbersome to administer.  The best solution seemed to be LDAP, and I duly followed the guide <a href="http://www.debuntu.org/ldap-server-and-linux-ldap-clients">Debuntu</a> to install, and I managed to integrate LDAP with PAM thus giving me the ability to allow users to login with an LDAP account; but in a nutshell that was exactly what was wrong with this solution - the users <em>had</em> to login to the server, before their system account would be created, and if that was the case I might as well have stuck with local system accounts in the first place.  What I needed was a true virtual mail host.  To that end, I was pointed in the direction of a <a href="http://www.howtoforge.com/postfix-virtual-hosting-with-ldap-and-dovecot-on-ubuntu8.04">Ubuntu howto on Howtoforge</a>.</p>

<p>Okay but this was for Ubuntu not Debian and for one reason and another I simply could not get it working.  After starting from scratch a couple of times, but ending up in the same place, I found that I had to combine the howto with <a href="http://www.howtoforge.com/postfix-virtual-hosting-with-ldap-backend-and-with-dovecot-pop3-imap-on-ubuntu-8.10">this one for 8.10</a>.</p>

<p>Even then it took a fair amount of battling to get it working on Debian Lenny.  The key to most of my problems was in reading the comments on every page, as these include invaluable corrections and suggestions.</p>

<p>So after a week of pain, I now have a working virtual mail host, now I just need to set-up the domains, users and mailgroups.</p>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP5 NX Client</title>
      <link>https://chrisjrob.com/2009/05/13/ltsp5-nx-client/</link>
      <pubDate>Wed, 13 May 2009 17:14:37 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2009/05/13/ltsp5-nx-client</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <h2 id="instructions">Instructions</h2>

<p>These instructions are for installing NoMachine’s NX Client for Linux on LTSP, to enable connection to a FreeNX (or NX) server from a screen script.</p>

<!--more-->

<h2 id="warning">Warning</h2>

<p>These instructions are for Debian Lenny.  They are my notes of what I did, and may contain errors or missed steps.</p>

<p>This assumes you have FreeNX installed somewhere to which to connect.  You might like to see my <a href="/2010/07/08/install-freenx/">Install FreeNX</a> for details.</p>

<h2 id="download-nxclient">Download NXClient</h2>

<p>Visit <a href="http://www.nomachine.com/download.php">NoMachine.com</a> and download the Debian .deb installation.  Copy the deb file into <code class="language-plaintext highlighter-rouge">/opt/ltsp/i386/root</code>.</p>

<h2 id="install-nxclient-in-chroot">Install NXClient in chroot</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo chroot /opt/ltsp/i386
# cd root
# apt-get install libaudiofile0
# dpkg -i nxclient_3.3.0-6_i386.deb (or whatever the name of the file is)
# exit
</code></pre></div></div>

<h2 id="install-openbox-in-chroot">Install OpenBox in chroot</h2>

<p>Unfortunately running nxclient restarts X every time that it’s about to connect.  The solution is to install a lightweight Window Manager like xfwm4 or openbox.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo chroot /opt/ltsp/i386
# apt-get install openbox
# exit
</code></pre></div></div>

<h2 id="create-user-settings">Create User Settings</h2>

<p>Easiest way is to install NXClient on the server, and run it to create your settings, then copy your <code class="language-plaintext highlighter-rouge">/home/user/.nx</code> directory into the chroot.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo cp -r /home/userid/.nx /opt/ltsp/i386/home/
</code></pre></div></div>

<p>Move your <code class="language-plaintext highlighter-rouge">/home/userid/.ssh/known_hosts</code> file sideways, and connect to any and all freenx servers that you wish to be able to use.  Then copy this file to <code class="language-plaintext highlighter-rouge">/opt/ltsp/i386/home/.ssh/</code>.</p>

<h2 id="edit-nx-settings">Edit nx settings</h2>

<p>Unfortunately these settings include duff information, change to <code class="language-plaintext highlighter-rouge">/opt/ltsp/i386/home/.nx/config</code> and edit <code class="language-plaintext highlighter-rouge">nxclient.cfg</code> file, change the location in the following line to:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;option key="Personal NX dir" value="/home/.nx" /&gt;
</code></pre></div></div>

<h2 id="create-screen-script">Create Screen Script</h2>

<p>Create a new screen script:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo nano /opt/ltsp/i386/usr/share/ltsp/screen.d/openbox
</code></pre></div></div>

<p>And copy the following into it:</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">#!/bin/sh</span>

<span class="nv">PATH</span><span class="o">=</span>/bin:<span class="nv">$PATH</span><span class="p">;</span> <span class="nb">export </span>PATH
<span class="nv">HOME</span><span class="o">=</span>/home<span class="p">;</span> <span class="nb">export </span>HOME

<span class="nb">.</span> /usr/share/ltsp/screen-x-common

<span class="k">if</span> <span class="o">[</span> <span class="nt">-x</span> /usr/share/ltsp/xinitrc <span class="o">]</span><span class="p">;</span> <span class="k">then
    </span><span class="nv">xinitrc</span><span class="o">=</span>/usr/share/ltsp/xinitrc
<span class="k">fi

</span>xinit <span class="nv">$xinitrc</span> /usr/bin/openbox-session <span class="nt">--</span> <span class="k">${</span><span class="nv">DISPLAY</span><span class="k">}</span> vt<span class="k">${</span><span class="nv">TTY</span><span class="k">}</span> <span class="k">${</span><span class="nv">X_ARGS</span><span class="k">}</span> <span class="nt">-br</span> <span class="o">&gt;</span>/dev/null
</code></pre></div></div>

<p>This script will make the root user’s home directory to be <code class="language-plaintext highlighter-rouge">/home</code>.  I probably should have set it to <code class="language-plaintext highlighter-rouge">/root</code>, but when I experimented with that it didn’t work correctly, I suspect I should have persevered, but I did not, with the result that I am pointing everything to /home instead.</p>

<h2 id="make-openbox-autostart-nxclient">Make OpenBox Autostart NXClient</h2>

<p>Create the Openbox configuration directory:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo mkdir -p /opt/ltsp/i386/home/.config/openbox
</code></pre></div></div>

<p>Then create a new file <code class="language-plaintext highlighter-rouge">autostart.sh</code>:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo nano /opt/ltsp/i386/home/.config/openbox/autostart.sh
</code></pre></div></div>

<p>And paste in the following:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>(sleep 2 &amp;&amp; /usr/NX/bin/nxclient) &amp;
</code></pre></div></div>

<p>And make it executable:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo chmod a+x /opt/ltsp/i386/home/.config/openbox/autostart.sh
</code></pre></div></div>

<h2 id="update-ltsconf">Update <code class="language-plaintext highlighter-rouge">lts.conf</code></h2>

<p>In <code class="language-plaintext highlighter-rouge">lts.conf</code>, on the client you wish to test, just set <code class="language-plaintext highlighter-rouge">SCREEN_07 = openbox</code>.</p>

<h2 id="reboot-client">Reboot Client</h2>

<p>Reboot client the and test!</p>

<h2 id="references">References</h2>

<p>None, sadly.  No-one to blame but me.</p>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP5 Client Sound</title>
      <link>https://chrisjrob.com/2009/05/06/ltsp5-sound-client/</link>
      <pubDate>Wed, 06 May 2009 16:17:00 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2009/05/06/ltsp5-sound-client</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <h2 id="background">Background</h2>

<p>On Ubuntu and Debian sound on the client gets started automatically during boot by default (the distros udev and the alsa scripts will detect your soundcard and start all needed services if a soundcard was detected on your client).  LDM (the default display manager we use in ltsp5) then sets up a virtual ALSA device in the users session during login.  The tunnel ALSA uses as endpoint is set up through LDM by setting the <code class="language-plaintext highlighter-rouge">PULSE_SERVER</code> variable, it should point to the clients IP at port 4713 (check that by runing “env” in a terminal when logged in).</p>

<!--more-->

<p><strong>The pulse server only runs on the client, it has nothing to do with sound but being the transport endpoint… do not play with any pulse audio on the server, it’s all ALSA.</strong></p>

<h2 id="warning">Warning</h2>

<p>This document is the LTSP 4.2 Client Sound document, which I am in the process of migrating to LTSP 5.  I think it’s pretty much there now down to the last step, which may or may not be appropriate for LTSP 5.</p>

<h2 id="step-1---ensure-users-are-in-the-audio-group">Step 1 - Ensure users are in the audio group</h2>

<p>LDM (the default display manager we use in ltsp5) then sets up a virtual ALSA device in the users session during login.  The users that shall use sound need to be in the audio group to have access to the virtual sound device and volume control.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo adduser kate audio
Password: *******
The user `kate' is already a member of `audio'.
</code></pre></div></div>

<h2 id="step-2---switch-on-sound">Step 2 - Switch on sound</h2>

<p>You need to switch sound on for the clients, either for all clients by adding to <code class="language-plaintext highlighter-rouge">[default]</code> group at the top of the <code class="language-plaintext highlighter-rouge">lts.conf</code> file, or by adding to the specific client in the usual way.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># File: /opt/ltsp/i386/etc/lts.conf
#
[default] 
    SOUND_DAEMON       = pulse
    SOUND              = True
</code></pre></div></div>

<h2 id="step-3---check-alsa-set-up">Step 3 - Check alsa set-up</h2>

<p>To check the alsa setup is proper, have a look at <code class="language-plaintext highlighter-rouge">/etc/asound.conf</code>.  There should be two lines like the following:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>pcm.!default { type pulse }
ctl.!default { type pulse }
</code></pre></div></div>

<p>You may also have a file in the user’s home directory <code class="language-plaintext highlighter-rouge">.asound.conf</code>, which should probably be removed in order to default to the global setting?</p>

<h2 id="step-4---check-port">Step 4 - Check port</h2>

<p>The tunnel ALSA uses as endpoint is set up through LDM by setting the <code class="language-plaintext highlighter-rouge">PULSE_SERVER</code> variable, it should point to the clients IP at port 4713 (check that by runing “env” in a terminal when logged in).</p>

<p>Open a shell and type:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ env | grep PULSE
PULSE_SERVER=tcp:192.168.0.48:4713
$
</code></pre></div></div>

<h2 id="step-5---identify-soundcard">Step 5 - Identify soundcard</h2>

<p>To determine what Soundcard is installed in your PC, key [Ctrl]+[Alt]+[F1] and log in as root.  If you cannot log in, you may need to set the LTSP Client Root Password.</p>

<p>In the shell, to show any PCI Soundcards, type:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># lspci -v | more
</code></pre></div></div>

<p>Look for a device stating “audio” and make a note of the salient details.</p>

<h2 id="step-5b---check-sound-not-muted">Step 5b - Check Sound not Muted</h2>

<p>Some soundcards seem to suffer from a problem that they start-up muted.  To test this, whilst logged onto the client type:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># alsamixer
</code></pre></div></div>

<p>If for example the main volume is at nil and there is “MM” (Muted left and Muted right) at the bottom of the slider, then pressing M to unmute, and the cursor keys to increase the volume, will resolve the problem.  The only thing is that this fix will be lost next time you boot the client.</p>

<p>See <a href="/2009/02/17/ltsp5-sound-client-unmute-fix/">Unmute Fix</a> for details on how to permanently cure this problem.</p>

<h2 id="step-6---identify-sound-module-with-knoppix">Step 6 - Identify sound module with Knoppix</h2>

<p>Boot the client with Knoppix or another live CD and from a terminal window type <code class="language-plaintext highlighter-rouge">lsmod</code> to identify the sound module.  Use this information to help you in the next step.</p>

<h2 id="step-7---determine-appropriate-driver">Step 7 - Determine appropriate driver</h2>

<p>To decide the appropriate driver to use, typing the following command on the server or functioning client, will give you a list of available drivers:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ find /opt/ltsp/i386/lib/modules/ | grep snd
</code></pre></div></div>

<h2 id="step-8---trial-and-error">Step 8 - Trial and error</h2>

<p>At this point it’s probably worth removing, or commenting out the sound options, so that the client boots without any sound modules loaded. Once booted key Ctrl+Alt+F1.</p>

<p>Unless you have a good knowledge of sound drives, this is going to be a little bit of trial and error - remember Google is your friend. In this instance I Googled for “LTSP Intel 82801EB” and found a page detailing the following:</p>

<blockquote>
  <blockquote>
    <p>Intel Corp. 82801EB/ER (ICH5/ICH5R) AC’97 Audio Controller</p>
  </blockquote>

  <table>
    <tbody>
      <tr>
        <td>lsmod</td>
        <td>grep -i intel</td>
      </tr>
    </tbody>
  </table>

  <p>snd_intel8x0m 20036 1</p>
</blockquote>

<p>I compared this with the output from Step 4 and decided the best match was <code class="language-plaintext highlighter-rouge">snd-intel8x0</code>.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># modprobe snd-intel8x0
</code></pre></div></div>

<p>The command responded with some clean output. I therefore added the following to LTS.CONF:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>SMODULE_01         = "snd-intel8x0"
</code></pre></div></div>

<p>And success!</p>

<p>A common Soundblaster compatible card is:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># File: /opt/ltsp/i386/etc/lts.conf
#
SMODULE_01 = "sb io=0x220 irq=5 dma=1"
</code></pre></div></div>

<h2 id="related-pages">Related Pages</h2>

<ul>
  <li><a href="/2008/06/21/ltsp-sound-on-compaq-ensff-pcs/">LTSP5 Sound Client :: Configure Compaq Deskpro ENSFF</a></li>
  <li><a href="/2009/02/17/ltsp5-sound-client-unmute-fix/">LTSP5 Sound Client :: Unmute Fix</a></li>
</ul>

       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP5 Sound</title>
      <link>https://chrisjrob.com/2009/04/30/ltsp5-sound/</link>
      <pubDate>Thu, 30 Apr 2009 08:32:19 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2009/04/30/ltsp5-sound</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <h2 id="introduction">Introduction</h2>

<p>One of the many benefits of LTSP5 is that it does away with the need for ESD sound (or other hacks), and instead utilises Pulseaudio on the client and Alsa on the server.</p>

<p>The rest of this document is largely based on the following Ubuntu/Gnome instructions:</p>

<ul>
  <li>http://developer.novell.com/wiki/index.php/Feisty/HOWTO:_PulseAudio</li>
</ul>

<!--more-->

<p>Those instruction now state that they are obsolete for new versions of Ubuntu; however they still seem to be required for Debian Lenny.</p>

<h2 id="install-packages-on-server">Install packages on server</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo apt-get install pulseaudio liboil0.3 pulseaudio-utils libpulse-browse0 libpulse-mainloop-glib0 padevchooser pulseaudio-esound-compat
$ sudo apt-get install libao-pulse (for etch)
$ sudo apt-get install libao2 (for lenny)
$ sudo apt-get install alsa-base alsa-utils libasound2-plugins
</code></pre></div></div>

<h2 id="install-packages-on-client">Install packages on client</h2>

<p>I believe that these packages are already installed in Lenny, but no harm in checking:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo chroot /opt/ltsp/i386/
# apt-get install pulseaudio pulseaudio-esound-compat pulseaudio-module-x11
# exit
</code></pre></div></div>

<h2 id="alsa-configuration">ALSA configuration</h2>

<p>On the server, configure ALSA to forward audio to PulseAudio by creating a file <code class="language-plaintext highlighter-rouge">/etc/asound.conf</code> with the following:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>pcm.!default {
        type pulse
}

ctl.!default {
        type pulse
}
</code></pre></div></div>

<h2 id="pulseaudio-configuration">PulseAudio configuration</h2>

<p>Configure the PulseAudio daemon, create <code class="language-plaintext highlighter-rouge">/opt/ltsp/i386/etc/pulse/daemon.conf</code> as follows:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>daemonize = 1
high-priority = 1
log-target = stderr
resample-method = trivial
no-cpu-limit = 1
system-instance = 1
disable-shm = 1
</code></pre></div></div>

<h2 id="conclusion">Conclusion</h2>

<p>In my experience there is no need to reboot the server, in KDE I just restarted the sound system by switching sound off and back on in the KDE Control Panel, and clicked Test button.  I could probably just have logged off/on.</p>

<h2 id="references">References</h2>

<ul>
  <li>http://developer.novell.com/wiki/index.php/Feisty/HOWTO:_PulseAudio</li>
</ul>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | Install iTalc on Debian Lenny</title>
      <link>https://chrisjrob.com/2009/04/24/ltsp-install-italc-on-debian-lenny/</link>
      <pubDate>Fri, 24 Apr 2009 13:35:12 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2009/04/24/ltsp-install-italc-on-debian-lenny</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/italc_icon.png" align="right" alt="Featured Image">
         
         <h2 id="warning">Warning</h2>

<p>After completing this installation, the clients received an error on login about port 5900 already in use.  Upgrading italc-client (by temporarily adding the sid repository to <code class="language-plaintext highlighter-rouge">/etc/apt/source.list</code> in the chroot and re-installing italc-client) fixed this problem.</p>

<p>However, I was unable to get an acceptable performance from italc for shadowing, and ended up install x11vnc.  See <a href="/2013/03/19/ltsp-install-x11vnc-on-ltsp5/">Install x11vnc on LTSP5</a> for more information.</p>

<!--more-->

<h2 id="install-italc-client-in-chroot">Install italc-client in chroot</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo chroot /opt/ltsp/i386
# mount -t proc /proc /proc
# mount -t sysfs sys /sys
# apt-get install italc-client
# umount sys
# umount /proc
# exit
</code></pre></div></div>

<p><strong>If you are using ubuntu rather than debian, or have switched to nbd instead of nfs, remember to do an ltsp-update-client after leaving the chroot.</strong></p>

<h2 id="install-italc-master-on-server">Install italc-master on server</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo apt-get install italc-master
</code></pre></div></div>

<h2 id="generate-key-pairs">Generate Key Pairs</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo ica -role teacher -createkeypair
</code></pre></div></div>

<p><strong>I tried in vain to stipulate -role admin - could not get the keys to work.</strong></p>

<h2 id="set-permissions">Set Permissions</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo addgroup italc
$ sudo addgroup &lt;userid&gt; italc
$ sudo chgrp -R italc /etc/italc/keys
$ sudo chmod -R 640 /etc/italc/keys/private/
$ sudo chmod -R ug+X /etc/italc/keys/private/
</code></pre></div></div>

<h2 id="transfer-keys-to-client">Transfer keys to client</h2>

<p><strong>This assumes a standard /opt/ltsp/i386 chroot, change path to suit your installation.</strong></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo mkdir /opt/ltsp/i386/etc/italc/keys
$ sudo cp -r /etc/italc/keys/public /opt/ltsp/i386/etc/italc/keys/
</code></pre></div></div>

<h2 id="create-client-start-script">Create client start script</h2>

<p>Enter the chroot:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo chroot /opt/ltsp/i386
</code></pre></div></div>

<p>And create the following script:</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">#!/bin/sh</span>
<span class="c"># /usr/share/ldm/rc.d/S20-ica-launcher</span>
/usr/bin/ica &amp;
<span class="nb">true</span>
</code></pre></div></div>

<h2 id="test">Test</h2>

<ul>
  <li>Reboot client</li>
  <li>Log into client</li>
  <li>Open a terminal on the server and run /usr/bin/ica -noshm</li>
  <li>Run italc</li>
</ul>

<h2 id="references">References</h2>

<ul>
  <li>https://help.ubuntu.com/community/UbuntuLTSP/iTalc</li>
  <li>http://indianalinux.blogspot.com/2007/02/howto-install-italc-from-source-on.html</li>
  <li>http://wiki.ubuntu-fi.org/LTSP5_iTalc (Finnish)</li>
  <li>http://www.mail-archive.com/debian-edu@lists.debian.org/msg15477.html</li>
</ul>

       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | Install iTalc on Debian Etch</title>
      <link>https://chrisjrob.com/2009/04/24/ltsp-install-italc-on-debian-etch/</link>
      <pubDate>Fri, 24 Apr 2009 13:34:25 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2009/04/24/ltsp-install-italc-on-debian-etch</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/italc_icon.png" align="right" alt="Featured Image">
         
         <h2 id="introduction">Introduction</h2>

<p><strong>Stop!  I believe there are now instructions on the ‘net for installing the client on the client instead of on the server</strong></p>

<p>iTalc is a “teacher tool” including screen shadowing functionality.  It has replaced Thin Client Manager in Edubuntu 8.04.</p>

<!--more-->

<p>The problem with italc is that the documentation is, I believe, for LTSP4.2, not LTSP5.  Worse, the <a href="http://italc.sourceforge.net/wiki/index.php?title=Download:Debian">Download → Debian</a> points at a defunct location, and goes on to state that the official Debian repositories contain out-of-date packages.</p>

<p>The following is a description for installing from source; which largely the document I followed, and you should read it in conjunction with this:</p>

<ul>
  <li><a href="http://indianalinux.blogspot.com/2007/02/howto-install-italc-from-source-on.html">http://indianalinux.blogspot.com/2007/02/howto-install-italc-from-source-on.html</a></li>
</ul>

<h2 id="warnings">Warnings</h2>

<p>This is a description of how I personally installed iTalc on Debian Etch with KDE 3.55.</p>

<p>The installation worked fine, except that iTalc kept bombing out every few seconds, making it completely useable.  It was quite obvious that this was down to Qt4, which Etch’s version is too old for iTalc.  Unfortunately there was no backports, so I ended up installing Qt4 from Lenny; resulting in several additional packages needing to be installed.  This immediately resolved the stability issues.</p>

<h2 id="download-source">Download source</h2>

<p>Navigate to the <a href="http://sourceforge.net/project/showfiles.php?group_id=132465">italc download page</a> and copy the link to the latest tar.gz file.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ cd /usr/src
$ sudo wget http://downloads.sourceforge.net/italc/italc-1.0.9-rc4.tar.bz2?modtime=1215423893&amp;big_mirror=0
</code></pre></div></div>

<h2 id="extract">Extract</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo tar -xvvjf italc-1.0.9-rc4.tar.bz2
$ cd italc*
</code></pre></div></div>

<h2 id="read-installation-notes">Read installation notes</h2>

<p>Yes, believe it or not you shouldn’t follow howto’s like this blindly, instead read the developer’s installation instructions and make your own judgements!</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ cat INSTALL | more
</code></pre></div></div>

<h2 id="install-dependencies">Install dependencies</h2>

<p>At the time of writing the above install file stated the following dependencies, which you should now install:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo apt-get install libqt4-dev qt4-dev-tools xorg-dev libxtst-dev libjpeg62-dev zlib1g-dev libssl-dev
</code></pre></div></div>

<p>xorg-dev will install a great many other files (probably worth removing them later)</p>

<p>In addition, we will need build-essential, in order to compile from source:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo apt-get install build-essential
</code></pre></div></div>

<p>And lastly, <a href="http://indianalinux.blogspot.com/2007/02/howto-install-italc-from-source-on.html">this page</a> included the following dependency, which we may as well install:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo apt-get install libxtst-dev
</code></pre></div></div>

<h2 id="compile-and-install">Compile and install</h2>

<p>As normal we need to ensure that we are in the source directory and then:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ./configure --prefix=/usr
</code></pre></div></div>

<p>If that completes successfully, we can proceed to make:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ make
</code></pre></div></div>

<p>And, if that completes successfully, we can proceed to install:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo make install
</code></pre></div></div>

<h2 id="client-installation-on-the-server">Client installation on the server</h2>

<p>The installation was done as part of the server install, so all we need to do is create the client keys:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo ica -role teacher -createkeypair
</code></pre></div></div>

<p>Change permissions to increase security:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo addgroup italc
$ sudo adduser username italc
$ sudo chgrp -R italc /etc/italc/keys/private
$ sudo chmod -R o-rwx /etc/italc/keys/private
</code></pre></div></div>

<p>This method has a problem in that all the clients are going to be coming from the same IP address, i.e. the server IP, so we need to give each user their own port.  A good idea is to base the port number on 10000 + the last segment of their IP address.  Edubuntu has a script for this, which requires the $LTSP_CLIENT variable to be present. I have modified so that it instead uses the $SSH_CLIENT variable, as follows:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>#!/bin/sh

# /usr/bin/ica-launcher
if [ "$SSH_CLIENT" ]
then
        PORT=`echo $SSH_CLIENT | awk -F . '{print \$4}' | awk -F " " '{print \$1}'`
        IVS=$((10000 + $PORT))
        ISD=$((11000 + $PORT))
        ica -noshm -ivsport $IVS -isdport $ISD &amp;
else
        ica -noshm
fi
</code></pre></div></div>

<h2 id="autostart">Autostart</h2>

<p>We need the client to run automatically when users log in.  In KDE this means a .desktop file in /usr/share/autostart.  If you’re unsure how to do this, then an example “italc.desktop” file is shown below:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/usr/share/autostart/italc.desktop:

[Desktop Entry]
Comment=
Comment[en_GB]=
Encoding=UTF-8
Exec=/usr/bin/ica-launcher
GenericName=
GenericName[en_GB]=
Icon=/usr/share/icons/italc.png
MimeType=
Name=iTalc Client
Name[en_GB]=iTalc Client
Path=
StartupNotify=true
Terminal=false
TerminalOptions=
Type=Application
X-DCOP-ServiceType=
X-KDE-SubstituteUID=false
X-KDE-Username=
</code></pre></div></div>

<p>You also need to exclude from session restoring for all users (if you use KDE session restore):</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/home/username/.kde/share/config/ksmserverrc:

[General]
excludeApps=ica
</code></pre></div></div>

<p><strong>Do the same for <code class="language-plaintext highlighter-rouge">/etc/skel/.kde/share/config/ksmserverrc</code> to effect new users when they are created.</strong></p>

<h2 id="alternative-method---client-installation-in-chroot">Alternative Method - client installation in chroot</h2>

<p>In theory I would have liked to have the client installed in the chroot.  This should run quicker and provide full functionality of logon/logoff etc.  In practice I was unable to get this working, with very much the same results as I had with x11vnc, in that the software would run, but netstat would not show any ports opened.  A mystery.  After spending a couple of days on this, I decided to give up and instead run both client and server on the server.</p>

<p>If you are determined to install in the chroot, I found that it was possible to download and install the following prebuilt binaries for Ubuntu (requires some packages installing from lenny):</p>

<ul>
  <li>http://www.stgraber.org/download/ubuntu/italc/hardy-i386/</li>
</ul>

<p>This will automatically generate the keys, and you will need to copy the private key to the server.</p>

<p>Also, you should probably make the X.Org Module change (see below).</p>

<p>And don’t forget to update the image:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo ltsp-update-image
</code></pre></div></div>

<h2 id="references">References</h2>

<ul>
  <li>http://italc.sourceforge.net/
    <ul>
      <li>http://italc.sourceforge.net/wiki/index.php?title=ITALC_in_a_ThinClient_environment</li>
    </ul>
  </li>
  <li>https://wiki.ubuntu.com/iTalc</li>
  <li>http://italc.sourceforge.net/home.php</li>
  <li>http://wiki.skolelinux.de/Etch/Italc</li>
  <li>http://www.stgraber.org/</li>
  <li>http://indianalinux.blogspot.com/2007/02/howto-install-italc-from-source-on.html</li>
</ul>

       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP Rdesktop Sound</title>
      <link>https://chrisjrob.com/2009/03/21/ltsp5-sound-rdesktop/</link>
      <pubDate>Sat, 21 Mar 2009 06:28:35 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2009/03/21/ltsp5-sound-rdesktop</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <h2 id="background">Background</h2>

<p>Rdesktop is a problem, because it uses <code class="language-plaintext highlighter-rouge">/dev/dsp</code> as the sound device (for version 1.5 at least).  This is incompatible with ALSA.</p>

<h2 id="solution">Solution</h2>

<!--more-->

<p>Specifying “oss” as the sound driver, instead of the default, worked fine:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ padsp rdesktop -r sound:local:oss 192.168.0.1
</code></pre></div></div>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | Local Device Icons on KDE Desktop</title>
      <link>https://chrisjrob.com/2009/03/21/ltsp-local-device-icons-on-kde-desktop/</link>
      <pubDate>Sat, 21 Mar 2009 06:27:07 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2009/03/21/ltsp-local-device-icons-on-kde-desktop</guid>
      <description>
       <![CDATA[
         
         <p>Read:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/usr/share/doc/ltspfs/examples/kde-desktop-icons
</code></pre></div></div>

<p>Add follow instructions.  You’ll need to create the directory mentioned.</p>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP4.2 Client Sound</title>
      <link>https://chrisjrob.com/2009/03/21/ltsp4.2-sound-client/</link>
      <pubDate>Sat, 21 Mar 2009 06:26:08 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2009/03/21/ltsp4.2-sound-client</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <h2 id="step-1---switch-on-sound">Step 1 - Switch on sound</h2>

<p>Firstly, you need to switch sound on for the clients.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># File: /opt/ltsp/i386/etc/lts.conf
#
# enable sound by default
SOUND                   = Y
# choose either esd or nasd to be the default (esd only on x86_64)
SOUND_DAEMON            = esd
VOLUME                  = 100 # Speaker &amp; WAVE volume pecentage
MIC_VOLUME              = 100 # Microphone volume
CD_VOLUME               = 75  # CD Audio volume
</code></pre></div></div>

<!--more-->

<h2 id="step-2---identify-soundcard">Step 2 - Identify soundcard</h2>

<p>To determine what Soundcard is installed in your PC, add the line:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># File: /opt/ltsp/i386/etc/lts.conf
#
SCREEN_02          = shell
</code></pre></div></div>

<p>Then enter after rebooting, enter shell by typing Ctrl+Alt+F2. In the shell, to show any PCI Soundcards, type:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># lspci -v | more
</code></pre></div></div>

<p>Look for a device stating “audio” and make a note of the salient details. For example my test PC has the following details:</p>

<p>Intel 82801EB/ER AC97 IRQ5 IO Port d400 @ 256k and d800 @ 64k.</p>

<h2 id="step-3---check-ltsporg">Step 3 - Check LTSP.org</h2>

<p>Check the following website - you might strike lucky!</p>

<ul>
  <li>http://wiki.ltsp.org/twiki/bin/view/Ltsp/SoundCards</li>
</ul>

<h2 id="step-4---determine-appropriate-driver">Step 4 - Determine appropriate driver</h2>

<p>To decide the appropriate driver to use, typing the following command on the server or functioning client, will give you a list of available drivers:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ find /opt/ltsp/i386/lib/modules/ | grep snd
</code></pre></div></div>

<h2 id="step-5---identify-sound-module-with-knoppix">Step 5 - Identify sound module with Knoppix</h2>

<p>Boot the client with Knoppix and from a terminal window type “lsmod” to identify the sound module.</p>

<h2 id="step-6---trial-and-error">Step 6 - Trial and error</h2>

<p>At this point it’s probably worth removing, or commenting out the sound options, so that the client boots without any sound modules loaded. Once booted key Ctrl+Alt+F2.</p>

<p>Unless you have a good knowledge of sound drives, this is going to be a little bit of trial and error - remember Google is your friend. In this instance I Googled for “LTSP Intel 82801EB” and found a page detailing the following:</p>

<blockquote>
  <blockquote>
    <p>Intel Corp. 82801EB/ER (ICH5/ICH5R) AC’97 Audio Controller</p>
  </blockquote>

  <table>
    <tbody>
      <tr>
        <td>lsmod</td>
        <td>grep -i intel</td>
      </tr>
    </tbody>
  </table>

  <p>snd_intel8x0m 20036 1</p>
</blockquote>

<p>I compared this with the output from Step 4 and decided the best match was “snd-intel8x0”.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># modprobe snd-intel8x0
</code></pre></div></div>

<p>The command responded with some clean output. I therefore added the following to LTS.CONF:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>SMODULE_01         = "snd-intel8x0"
</code></pre></div></div>

<p>And success!</p>

<p>A common Soundblaster compatible card is:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># File: /opt/ltsp/i386/etc/lts.conf
#
SMODULE_01 = "sb io=0x220 irq=5 dma=1"
</code></pre></div></div>

<h2 id="other-issues">Other issues</h2>

<h3 id="soundcard-okay-but-no-sound">Soundcard okay but no sound</h3>

<p>If you are confident that the soundcard is being identified correctly and there are no errors on boot-up, then perhaps the volume is muted. The only volume controls at our disposal are:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>VOLUME                  = 100 # Speaker &amp; WAVE volume pecentage
MIC_VOLUME              = 100 # Microphone volume
CD_VOLUME               = 75  # CD Audio volume
</code></pre></div></div>

<p>However from a client shell you can try the following:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ cd /share/sounds/alsa
$ esdplay Noise.wav
$ amixer scontrols              # Take a note of them
$ amixer sget Front             # To view each control
$ amixer sset Front 75% unmute   # To set a control called Front to 75% volume
</code></pre></div></div>

<h2 id="snd-hda-intel-issues">snd-hda-intel issues</h2>

<p>Oh, so may issues. Try each of the following in <code class="language-plaintext highlighter-rouge">lts.conf</code>:</p>

<p><strong>Google for ALSA-Configuration.txt and review section on snd-hda-intel.</strong></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>SMODULE_01              = "snd-hda-intel model=auto"
SMODULE_01              = "snd-hda-intel model=3stack"
SMODULE_01              = "snd-hda-intel model=3stack-dig"
SMODULE_01              = "snd-hda-intel index=0 probe_mask=3 position_fix=3"
SMODULE_01              = "snd-hda-intel position_fix=1 model=3stack"
</code></pre></div></div>

<h2 id="sound-muted">Sound muted</h2>

<p>All working but sound muted. Save this script as “unmute” in <code class="language-plaintext highlighter-rouge">/opt/ltsp/i386/etc/rc.d</code>:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>#!/bin/bash
#
# Copyright Gideon Romm, Symbio Technologies
#
# Released under GPLv2
#
# This is a script to set up certain things 
# that are not already setup in an SBA environment
#
# Specifically:
#   1. restore sound levels
#

# Set up local environment
if [ -f /etc/lts.conf ]; then
    eval `getltscfg -a`
fi

# Set up sound
if [ -n "$VOLUME" ]; then
    amixer sset Master,0 ${VOLUME}% unmute 2&gt;/dev/null
    amixer sset 'Master Digital',0 ${VOLUME}% unmute 2&gt;/dev/null
    amixer sset Headphone,0 ${HEADPHONE_VOLUME:-$VOLUME}% unmute 2&gt;/dev/null
fi

if [ -n "$PCM_VOLUME" ]; then
    amixer sset PCM,0 ${PCM_VOLUME}% unmute 2&gt;/dev/null
fi

if [ -n "$MIC_VOLUME" ]; then
    amixer sset Mic,0 ${MIC_VOLUME}% unmute cap 2&gt;/dev/null
fi

if [ -n "$CD_VOLUME" ]; then
    amixer sset CD,0 ${CD_VOLUME}% unmute 2&gt;/dev/null
fi

if [ -n "$FRONT_VOLUME" ]; then
    amixer sset Front,0 ${FRONT_VOLUME}% unmute 2&gt;/dev/null
fi
</code></pre></div></div>

<p>Then add the following line to LTS.conf:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>RCFILE_01          = unmute
</code></pre></div></div>

<p>This unmute script also adds the functionality of FRONT_VOLUME, which may be set in LTS.CONF:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>FRONT_VOLUME       = 100
</code></pre></div></div>

<p>The script could be easily modified to enable other volume controls is required.</p>

       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP4.2 Sound</title>
      <link>https://chrisjrob.com/2009/03/21/ltsp4.2-sound/</link>
      <pubDate>Sat, 21 Mar 2009 06:25:59 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2009/03/21/ltsp4.2-sound</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <h2 id="introduction">Introduction</h2>

<p>Warning: sound on LTSP should only be contemplated by those who enjoy good health and have no history of heart disease in their family. If you are of a nervous disposition you should not attempt sound on LTSP.</p>

<p>Please note that this solution, at best, result in poor quality sound. High fidelity it is not.</p>

<!--more-->

<p>The absolute gospel according to LTSP sound is the following web page. You may consider this page to be disjointed and contradictory, that is because it is disjointed and contradictory.</p>

<ul>
  <li>http://wiki.ltsp.org/twiki/bin/view/Ltsp/Sound</li>
</ul>

<p>Good luck!</p>

<h2 id="esd-socket">ESD Socket</h2>

<p>ESD requires a socket to run, but if your server doesn’t have a sound card, then the odds are that you do not have a socket. You will need to create this manually:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo mkdir /tmp/.esd
$ sudo touch /tmp/.esd/socket
</code></pre></div></div>

<p>You will need some form of script and cron job in order to make this persist beyond server reboots.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>#!/bin/bash
if [ ! -e /tmp/.esd/socket ]; then
    /bin/mkdir /tmp/.esd
    /bin/touch /tmp/.esd/socket
fi
</code></pre></div></div>

<p>Save this script somewhere, make it executable and add it to crontab.</p>

<h2 id="oss-transparent-redirection-to-esd">OSS transparent redirection to esd</h2>

<p>There are other ways of getting sound, but this seems to work. Most Linux application can use <code class="language-plaintext highlighter-rouge">/dev/oss</code>, KDE, RealPlayer, Skype, … support it. Also if sound redirection by OSS might not be the best quality, in order to listen voicemails and/or online training it is more than enough.</p>

<p>The other nice thing with OSS redirection, is that from a system admin point of view it is a piece of cake !!! After you’ve started esound server from <code class="language-plaintext highlighter-rouge">lts.conf</code> as explained before, make it available automatically from X11 startup. In order to do so add in <code class="language-plaintext highlighter-rouge">/etc/X11/Xsession</code> somewhere before it launches your window manager.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>REMOTE_X11=${DISPLAY%:*}
if test "$REMOTE_X11" == ""
then
  export REMOTEX_11=false
else
  export ESPEAKER=$REMOTE_X11:16001
  export ESDDSP_MIXER=1
# export LD_PRELOAD="/usr/lib/libesddsp.so.0 /usr/lib/libesd.so.0 $LD_PRELOAD"        # Non-debian
  export LD_PRELOAD="/usr/lib/esound/libesddsp.so.0 /usr/lib/libesd.so.0 $LD_PRELOAD" # Debian
  export REMOTE_X11=true
fi
</code></pre></div></div>

<p>Note that the line:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>export LD_PRELOAD="/usr/lib/libesddsp.so.0 /usr/lib/libesd.so.0 $LD_PRELOAD"
</code></pre></div></div>

<p>must be changed to</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>export LD_PRELOAD="/usr/lib/esound/libesddsp.so.0 /usr/lib/libesd.so.0 $LD_PRELOAD"
</code></pre></div></div>

<p>In order to check, connect from your LSTP client and check <code class="language-plaintext highlighter-rouge">$ESPEAKER</code>. It’s value should look like ltsp-client-name:16001.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ echo $ESPEAKER
ws179.ltsp:16001
</code></pre></div></div>

<p>Next step is to try it, by finding a .wav file somewhere is <code class="language-plaintext highlighter-rouge">/usr/share/sounds</code> and run it using esdplay:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ esdplay /usr/share/sounds/alsa/test.wav
</code></pre></div></div>

<p>Hopefully you heard some sound?</p>

<h2 id="flash-sound">Flash Sound</h2>

<p>For YouTube and other flash websites, if you want sound, you should download and run this deb:</p>

<ul>
  <li>http://pulseaudio.vdbonline.net/libflashsupport/</li>
</ul>

<p>This is experimental and unsupported, but it worked first time.</p>

<h2 id="realplayer">Realplayer</h2>

<h3 id="references">References</h3>

<ul>
  <li>http://forms.real.com/real/player/blackjack.html</li>
  <li>http://linux.derkeiler.com/Mailing-Lists/Debian/2004-02/3778.html</li>
</ul>

<h3 id="step-1-create-download-directory">Step 1: Create download directory</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ cd ~
$ mkdir realplayer8
$ cd realplayer8
</code></pre></div></div>

<h3 id="step-2-download-realplayer-8">Step 2: Download Realplayer 8</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ wget http://software-dl.real.com/2241543e04bd76d81218//support/unix/rp8_linux20_libc6_i386_cs1_rpm.htm
</code></pre></div></div>

<h3 id="step-3-correct-name-of-downloaded-file">Step 3: Correct name of downloaded file</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ mv rp8_linux20_libc6_i386_cs1_rpm.htm rp8_linux20_libc6_i386_cs1.rpm
</code></pre></div></div>

<h3 id="step-4-convert-and-install-deb">Step 4: Convert and install deb</h3>

<p>I have tested and the –scripts option seems to work well.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ alien --scripts rp8_linux20_libc6_i386_cs1.rpm
$ dpkg -i rp8_linux20_libc6_i386_cs1.deb
</code></pre></div></div>

<h3 id="step-5-create-symlink-to-mozilla-plugins">Step 5: Create symlink to Mozilla Plugins</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo ln -s /usr/local/netscape/plugins/rpnp.so /usr/lib/mozilla/plugins/rpnp.so
</code></pre></div></div>

<h2 id="esound-on-vmware">ESound on VMWare</h2>

<p>If Enlightenment Sound Daemon is enabled on the Linux host, the software opens the host machine’s sound device by the time X starts. When a virtual machine with sound configured is started on a host with ESD running, Workstation will not be able to access the sound device because it is in use. As a workaround, you can start the Workstation session using the esddsp wrapper. Start the session by typing <code class="language-plaintext highlighter-rouge">esddsp vmware</code> or <code class="language-plaintext highlighter-rouge">esddsp &lt;virtualmachinename&gt;.cfg</code>. The wrapper will pass the sound output generated by the virtual machine as an audio stream to the ESD audio server.</p>

<h2 id="mplayer">MPlayer</h2>

<p>MPlayer must be configured</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/etc/mplayer$ sudo nano mplayer.conf
vo=x11
ao=esd
framedrop=1

$ sudo nano /etc/mplayerplug-in.conf

# See http://mplayerplug-in.sourceforge.net/config.php
# for a description of these options
vo=x11
ao=esd
cachesize=512
cache-percent=25
dload-dir=$HOME/tmp
autostart=1
enable-wmp=1
enable-qt=1
enable-rm=1
enable-gmp=1
enable-dvx=1
enable-mpeg=1
enable-mp3=1
enable-midi=0
enable-pls=1
enable-ogg=1
enable-smil=1
enable-helix=1
nomediacache=0
nopauseonhide=0
rtsp-use-tcp=0
rtsp-use-http=0
framedrop=1
</code></pre></div></div>

<ul>
  <li>http://mplayerplug-in.sourceforge.net/config.php</li>
</ul>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP4.2 Scanning</title>
      <link>https://chrisjrob.com/2009/03/21/ltsp4.2-scanning/</link>
      <pubDate>Sat, 21 Mar 2009 06:25:44 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2009/03/21/ltsp4.2-scanning</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <h2 id="enable-saned-on-terminal">Enable saned on terminal</h2>

<ul>
  <li>Edit <code class="language-plaintext highlighter-rouge">/opt/ltsp/i386/etc/lts.conf</code> and add <code class="language-plaintext highlighter-rouge">XINETD_SERVICES = "saned"</code> to the <code class="language-plaintext highlighter-rouge">[default]</code> or relevant terminal section</li>
  <li>Restart the terminal</li>
  <li>Run <code class="language-plaintext highlighter-rouge">scanimage -L</code> on workstation shell to verify that scanner has been detected</li>
</ul>

<!--more-->

<h2 id="usage">Usage</h2>

<ul>
  <li>Physically plug the scanner into the terminal using USB or parallel port.</li>
  <li>Edit <code class="language-plaintext highlighter-rouge">/etc/sane.d/net.conf</code> and add the hostname or address of client running saned</li>
  <li>Use xsane, OpenOffice.org, GIMP, or any other scanner-aware application, as they should now list the scanner.</li>
</ul>

<h2 id="alternative-to-netconf">Alternative to net.conf</h2>

<p>If you do not wish to add the host to net.conf (as shown above) then you can run the following:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ SANE_NET_HOSTS=`echo $DISPLAY | cut -d: -f1`
$ export SANE_NET_HOSTS
</code></pre></div></div>

<p><strong>This will only work for the life of the terminal window - so you will need to run the application from the command line. Alternatively add this to a script that does the scanning.</strong></p>

<h2 id="scanning-from-the-command-line">Scanning from the command line</h2>

<h3 id="check-scanner-detected">Check scanner detected</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ scanimage -L
</code></pre></div></div>

<h3 id="scan">Scan</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ scanimage -l 0 -t 0 -x 215 -y 297 --mode {Lineart|Gray|Color} --resolution {75..600} --format {pnm|tiff} --brightness {-100..100} --contrast {-100..100} &gt;test.pnm
</code></pre></div></div>

<h2 id="references">References</h2>

<ul>
  <li>http://wiki.ltsp.org/twiki/bin/view/Ltsp/Scanners</li>
</ul>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP 4.2 or LTSP 5</title>
      <link>https://chrisjrob.com/2009/03/21/ltsp-4.2-or-ltsp5/</link>
      <pubDate>Sat, 21 Mar 2009 06:25:19 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2009/03/21/ltsp-4.2-or-ltsp5</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <h2 id="choosing-your-version-of-ltsp">Choosing your version of LTSP</h2>

<p>There are two versions of LTSP currently available:</p>

<ul>
  <li>LTSP4.2</li>
  <li>LTSP5</li>
</ul>

<p>If you visit the LTSP website, then you can’t help but notice that <em>all</em> the information is on LTSP4.2.  If you do some Googling about LTSP5, you will quickly determine that LTSP5 is full of problems, at an early stage of development and best avoided.</p>

<p>Wrong, wrong, wrong.  You are just about to make a mistake.</p>

<!--more-->

<p>In fact LTSP5 is the current version and has been since 2006.  Indeed, if you try and seek any help in respect of version 4.2, and you will invariably get the response - <em>“LTSP4.2 is obsolete, unmaintained and you are an idiot to have installed it”</em>.</p>

<p>Okay I exaggerate, but not by much!  If you <em>do</em> install 4.2, at some point you are going to want to update the client.  Well that requires LBE (read the Wiki for details) - then you will hit the problem that LBE is broken and will not install.  You’ll ask for help and the response you will receive is pretty much as above.</p>

<p>Good luck sorting <em>that</em> little problem out, for myself I upgraded to LTSP5 (see <a href="/2010/06/25/ltsp5-upgrade/">LTSP5 Upgrade</a>) and I have never looked back.  The client is up-to-date and configurable, the local devices work, sound works, and little fluffy bunny rabbits nibble the grass while the sun shines.</p>

<p>In short all his just fine and dandy in the world of LTSP5.  Always assuming it’s been packaged for your distro, it has for Debian and Ubuntu, for the rest you’ll need to make your own enquiries.</p>

<h2 id="what-you-can-expect-from-ltsp42">What you can expect from LTSP4.2</h2>

<h3 id="positives">Positives</h3>

<p>A working reliable system.  Sound (see <a href="/2009/03/21/ltsp4.2-sound/">LTSP4.2 Sound</a>).  Local Devices that appear on the desktop when you plug them in.  Works particularly well for older clients (Pentium II with 32mb RAM).</p>

<h3 id="negatives">Negatives</h3>

<p>Expect to fight any PC built in the last two or three years.  Expect to have battles getting sound working on your clients (usually solvable, usually you have wounds to lick afterwards).  I am told that USB keys don’t work quite as well, although I never found any problem in this area.  Indeed I managed to get USB keys working better under LTSP4.2 than I have subsequently managed to do in LTSP5.</p>

<h2 id="what-you-can-expect-from-ltsp5">What you can expect from LTSP5</h2>

<p>A system that pretty much works as you expect.  Sound was simple to configure and works well.  Scanning took a little bit of working out (see <a href="/2009/11/18/ltsp5-scanning/">LTSP5 Scanning</a>).  Local devices work just fine (with the exception of some incorrectly partitioned devices).  The client system works very well, although I am still learning exactly how it all hangs together.  Newer PCs work perfectly, and all but the oldest PCs seem fine.  The ones I did have to get rid of were no great loss; but if you feel differently then I understand it is technically possible to install LTSP4.2 and LTSP5 on the same server, and get the benefits of each.  You’ll need to search the LTSP Mailing List to find out how.</p>

<p>I understand that it is even conceivable to deliver a full-blown desktop client system - although you need LDAP on your network to enable client logon.  Again, search the LTSP Mailing List for details.</p>

       ]]>
      </description>
    </item>
    
    <item>
      <title>Howto | Install IES4Linux on LTSP</title>
      <link>https://chrisjrob.com/2009/03/21/install-ies4linux-on-ltsp/</link>
      <pubDate>Sat, 21 Mar 2009 06:02:07 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2009/03/21/install-ies4linux-on-ltsp</guid>
      <description>
       <![CDATA[
         
         <h2 id="ies4linux">IES4Linux</h2>

<p>Internet Explorer for Linux</p>

<h2 id="recent-developments">Recent developments</h2>

<h3 id="bugs">Bugs</h3>

<p>Versions of Wine greater than 0.92 seem to cause IES4Linux to consume vast amounts of CPU both for wineserver and iexplore.exe. This problem seems to occur when accessing SSL pages (possibly Active-X pages).  Bugs have been <a href="https://bugs.launchpad.net/bugs/205895">logged with Ubuntu</a> which was quite rightly <a href="http://bugs.winehq.org/show_bug.cgi?id=13687">redirected to Wine</a>, which was rejected pending a <a href="http://bugs.winehq.org/show_bug.cgi?id=13734">regression test</a>, which in turn was redirected to IES4Linux.  The issue seems to be that Wine do not support native DLLs, but these are essential in making IE work under Linux.</p>

<!--more-->

<h3 id="deb-package">Deb package</h3>

<p>There <em>may</em> be a multi-user install deb package (for Ubuntu at least):</p>

<ul>
  <li>http://ubuntuforums.org/showthread.php?t=636758</li>
</ul>

<h2 id="install-wine">Install Wine</h2>

<p>Make sure you’ve installed Wine.</p>

<h2 id="read-debian-installation">Read Debian Installation</h2>

<ul>
  <li>http://www.tatanka.com.br/ies4linux/page/Installation:Debian</li>
</ul>

<h2 id="master-installation-ies4linux">Master Installation IES4Linux</h2>

<p>First you must create a master installation of ies4linux under <code class="language-plaintext highlighter-rouge">/usr/local</code>. To create the master copy, perform a standard ies4linux install as an ordinary desktop user (i.e. unpack the tarball, run <code class="language-plaintext highlighter-rouge">./ies4linux</code>):</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ wget http://www.tatanka.com.br/ies4linux/downloads/ies4linux-latest.tar.gz
$ tar zxvf ies4linux-latest.tar.gz
$ cd ies4linux-*
$ ./ies4linux
</code></pre></div></div>

<h2 id="convert-to-multi-user-system">Convert to Multi-user System</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ cd
$ rm bin/ie{5,55,6}
$ sudo mkdir -p /usr/local/share
$ sudo chmod a+rX /usr/local/share
$ sudo mv .ies4linux /usr/local/share/ies4linux
$ sudo chown -R root:root /usr/local/share/ies4linux
$ sudo chmod -R a+rX /usr/local/share/ies4linux
</code></pre></div></div>

<ul>
  <li>http://www.tatanka.com.br/ies4linux/forum/viewtopic.php?t=431</li>
</ul>

<p>Then install this script as any or all of <code class="language-plaintext highlighter-rouge">/usr/local/bin/ie{5,55,6}</code> and let your users run it:</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">#!/bin/sh</span>
<span class="c"># Launch script for multiuser ies4linux, master copy in /usr/local/share.</span>
<span class="c"># Install as /usr/local/bin/ie6 (or ie55 or ie5)</span>
<span class="c">#</span>
<span class="c"># Blame Andrew Chadwick &lt;andrewc-ies4linux0606@piffle.org&gt;, not Sergio.</span>
<span class="c">#</span>
<span class="c"># Released under the GNU GPL version 2 (or later, your call).</span>
<span class="c"># See ies4linux's own LICENSE or COPYING file for more information.</span>
<span class="c">####################################################</span>

<span class="nv">IE</span><span class="o">=</span><span class="sb">`</span><span class="nb">basename</span> <span class="s2">"</span><span class="nv">$0</span><span class="s2">"</span><span class="sb">`</span>
<span class="nv">MASTERPREFIX</span><span class="o">=</span><span class="s2">"/usr/local/share/ies4linux/</span><span class="nv">$IE</span><span class="s2">"</span>
<span class="nv">WINEPREFIX</span><span class="o">=</span><span class="s2">"</span><span class="k">${</span><span class="nv">HOME</span><span class="k">}</span><span class="s2">/.ies4linux/</span><span class="nv">$IE</span><span class="s2">"</span>

<span class="c"># If we're not set up, create the user's magic symlink-copy of the master</span>
<span class="c"># installation.</span>

<span class="k">if</span> <span class="o">!</span> <span class="nb">test</span> <span class="nt">-d</span> <span class="s2">"</span><span class="nv">$WINEPREFIX</span><span class="s2">"</span><span class="p">;</span> <span class="k">then
    if</span> <span class="o">!</span> <span class="nb">mkdir</span> <span class="nt">-p</span> <span class="s2">"</span><span class="nv">$WINEPREFIX</span><span class="s2">"</span><span class="p">;</span> <span class="k">then
        </span><span class="nb">echo</span> <span class="s2">"mkdir </span><span class="nv">$WINEPREFIX</span><span class="s2"> failed"</span>
        <span class="nb">exit </span>1
    <span class="k">fi
    if</span> <span class="o">!</span> lndir <span class="s2">"</span><span class="nv">$MASTERPREFIX</span><span class="s2">"</span> <span class="s2">"</span><span class="nv">$WINEPREFIX</span><span class="s2">"</span><span class="p">;</span> <span class="k">then
        </span><span class="nb">echo</span> <span class="s2">"lndir failed: is xutils installed?"</span>
        <span class="nb">exit </span>1
    <span class="k">fi</span>

    <span class="c"># The profile directory will be recreated automatically by wine on the</span>
    <span class="c"># first run, so it's OK to blow away eny existing copy hanging around in</span>
    <span class="c"># unwritable symlink form from the install, and it's OK to just create a</span>
    <span class="c"># blank one.</span>
   
    <span class="nv">PROFILES</span><span class="o">=</span><span class="s2">"</span><span class="nv">$WINEPREFIX</span><span class="s2">/drive_c/windows/profiles"</span>
    <span class="nb">rm</span> <span class="nt">-fr</span> <span class="s2">"</span><span class="nv">$PROFILES</span><span class="s2">"</span>
    <span class="nb">mkdir</span> <span class="nt">-p</span> <span class="s2">"</span><span class="nv">$PROFILES</span><span class="s2">"</span>

    <span class="c"># WINE needs to be able to write to the following files, so they can't be</span>
    <span class="c"># symlinks to root-owned ones.</span>
   
    <span class="k">for </span>file <span class="k">in</span> .no_prelaunch_window_flag system.reg userdef.reg user.reg<span class="p">;</span> <span class="k">do
        if </span><span class="nb">test</span> <span class="nt">-L</span> <span class="s2">"</span><span class="nv">$WINEPREFIX</span><span class="s2">/</span><span class="nv">$file</span><span class="s2">"</span><span class="p">;</span> <span class="k">then
            </span><span class="nb">rm</span> <span class="nt">-f</span> <span class="s2">"</span><span class="nv">$WINEPREFIX</span><span class="s2">/</span><span class="nv">$file</span><span class="s2">"</span>
            <span class="nb">cp</span> <span class="s2">"</span><span class="nv">$MASTERPREFIX</span><span class="s2">/</span><span class="nv">$file</span><span class="s2">"</span> <span class="s2">"</span><span class="nv">$WINEPREFIX</span><span class="s2">/</span><span class="nv">$file</span><span class="s2">"</span>
        <span class="k">fi
    done
    </span><span class="nb">chmod</span> <span class="nt">-R</span> og-rwx <span class="s2">"</span><span class="nv">$WINEPREFIX</span><span class="s2">"</span>
<span class="k">fi

</span><span class="nb">export </span>WINEPREFIX
<span class="nb">exec </span>wine <span class="s2">"</span><span class="nv">$WINEPREFIX</span><span class="s2">/drive_c/Program Files/Internet Explorer/IEXPLORE.EXE"</span>
<span class="nb">echo</span> <span class="s2">"Failed to launch WINE: see above for details"</span>
<span class="nb">exit </span>1
</code></pre></div></div>

<p>Run the script above as an ordinary desktop user. When it runs, this script tries to create a WINE prefix location under the user’s home, consisting mainly of symlinks to the master copy’s files. It then launches IE in the normal way.</p>

<p>If it screws up, delete your <code class="language-plaintext highlighter-rouge">~/.ies4linux</code> directory and try again.</p>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP5 Progress</title>
      <link>https://chrisjrob.com/2009/03/12/ltsp5-progress/</link>
      <pubDate>Thu, 12 Mar 2009 00:00:00 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2009/03/12/ltsp5-progress</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <p>After a week spent trying to install our Debian Lenny LTSP server, with the clients failing to boot with an error “rpc failed: 2”, and everyone I spoke to baffled as to how this could occur, I decided that enough was enough, and deleted the partitions and started again.  Within 2 hours the server was back up and running without any of the same problems.</p>

<!--more-->

<p>And a lesson learned: don’t invest too much time in an install, without testing that the fundamentals are in place!</p>

<ul>
  <li><a href="/2010/03/30/ltsp5-install/">LTSP5 Install</a></li>
</ul>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP5 Disable Floppy</title>
      <link>https://chrisjrob.com/2009/02/17/ltsp5-disable-floppy/</link>
      <pubDate>Tue, 17 Feb 2009 17:04:58 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2009/02/17/ltsp5-disable-floppy</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <p>Local floppy drives do not seem to work well under LTSP, in any case they are obsolete technology.  This page describes how to disable under LTSP5.</p>

<p>Find and edit the following file and comment out the legacy floppy drive command:</p>

<!--more-->

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Extract from /opt/ltsp/i386/etc/udev/ltspfsd.rules:

# legacy floppy drives:
#ACTION=="add", KERNEL=="fd[0-9]", RUN+="ltspfs_entry add %k auto"
^
----------------------------------

# exit
$ sudo ltsp-update-image
</code></pre></div></div>

       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP5 Client Root Password</title>
      <link>https://chrisjrob.com/2009/02/17/ltsp5-client-root-password/</link>
      <pubDate>Tue, 17 Feb 2009 16:26:24 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2009/02/17/ltsp5-client-root-password</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <h2 id="introduction">Introduction</h2>

<p>Most GNU/Linux machines have 12 virtual consoles, which you can access by pressing Control-Alt-F1, through Control-Alt-F12. There is a text based getty that is started on screen 1, but you normally can’t log into it, as there are no local users on the thin client.</p>

<!--more-->

<h2 id="setting-the-root-password-for-client">Setting the root password for client</h2>

<p>However, for debugging purposes, you may want to set up root to log in on the thin client. You may need to do this if you’re debugging problems with local devices, for example. Fortunately, it’s easy to do: on the server, just chroot into the LTSP chroot, and set the password with passwd.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo chroot /opt/ltsp/i386
# passwd
# exit
$ sudo ltsp-update-image
</code></pre></div></div>

<h2 id="logging-in">Logging in</h2>

<p>Just enter Ctrl-Alt-F1 on your terminal, and at the text login, login with “root” and the password you have set.</p>

       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP5 Client Sound | Unmute Fix</title>
      <link>https://chrisjrob.com/2009/02/17/ltsp5-sound-client-unmute-fix/</link>
      <pubDate>Tue, 17 Feb 2009 16:22:15 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2009/02/17/ltsp5-sound-client-unmute-fix</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/mute.png" align="right" alt="Featured Image">
         
         <h2 id="introduction">Introduction</h2>

<p>There is a problem with some sound cards that start up muted.  This installs a script which responds to settings in lts.conf.</p>

<p>To test this, whilst logged onto the client type:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># alsamixer
</code></pre></div></div>

<!--more-->

<p>If the main volume is at nil and there is “MM” (Muted left and Muted right) at the bottom of the slider, then pressing M to unmute, and the cursor keys to increase the volume, will resolve the problem.  You can experiment with the different channels, like PCM, FRONT and MASTER.  Play to your heart’s content, any changes will be lost on reboot.</p>

<p>The only thing is that this fix will be lost next time you boot the client.</p>

<h2 id="step-1-install-script">Step 1: Install Script</h2>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">#!/bin/bash</span>
<span class="c">#</span>
<span class="c"># Copyright Gideon Romm, Symbio Technologies</span>
<span class="c">#</span>
<span class="c"># Released under GPLv2</span>
<span class="c">#</span>
<span class="c"># This is a script to set up certain things </span>
<span class="c"># that are not already setup in an SBA environment</span>
<span class="c">#</span>
<span class="c"># Specifically:</span>
<span class="c">#   1. restore sound levels</span>
<span class="c">#</span>
<span class="c"># lts.conf:</span>
<span class="c"># VOLUME</span>
<span class="c"># PCM_VOLUME</span>
<span class="c"># MIC_VOLUME</span>
<span class="c"># CD_VOLUME</span>
<span class="c"># FRONT_VOLUME</span>

<span class="nb">echo</span> <span class="s2">"Restoring sound levels"</span> <span class="o">&gt;</span> /tmp/unmute.log

amixer
<span class="k">while</span> <span class="o">[</span> <span class="nv">$?</span> <span class="o">!=</span> 0 <span class="o">]</span><span class="p">;</span> <span class="k">do
</span><span class="nb">sleep </span>1
amixer
<span class="k">done</span>

<span class="c"># Set up local environment</span>
<span class="k">if</span> <span class="o">[</span> <span class="nt">-f</span> /etc/lts.conf <span class="o">]</span><span class="p">;</span> <span class="k">then
    </span><span class="nb">eval</span> <span class="sb">`</span>getltscfg <span class="nt">-a</span><span class="sb">`</span>
<span class="k">fi</span>

<span class="c"># Set up sound</span>
<span class="k">if</span> <span class="o">[</span> <span class="nt">-n</span> <span class="s2">"</span><span class="nv">$VOLUME</span><span class="s2">"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
</span>amixer sset Master,0 <span class="k">${</span><span class="nv">VOLUME</span><span class="k">}</span>% unmute 2&gt;/dev/null
<span class="nb">echo</span> <span class="s2">"amixer sset Master,0 </span><span class="k">${</span><span class="nv">VOLUME</span><span class="k">}</span><span class="s2">% unmute 2: </span><span class="nv">$?</span><span class="s2">"</span> <span class="o">&gt;&gt;</span> /tmp/unmute.log
amixer sset <span class="s1">'Master Digital'</span>,0 <span class="k">${</span><span class="nv">VOLUME</span><span class="k">}</span>% unmute 2&gt;/dev/null
<span class="nb">echo</span> <span class="s2">"amixer sset 'Master Digital',0 </span><span class="k">${</span><span class="nv">VOLUME</span><span class="k">}</span><span class="s2">% unmute 2: </span><span class="nv">$?</span><span class="s2">"</span> <span class="o">&gt;&gt;</span> /tmp/unmute.log
amixer sset Headphone,0 <span class="k">${</span><span class="nv">HEADPHONE_VOLUME</span><span class="k">:-</span><span class="nv">$VOLUME</span><span class="k">}</span>% unmute 2&gt;/dev/null
<span class="nb">echo</span> <span class="s2">"amixer sset Headphone,0 </span><span class="k">${</span><span class="nv">HEADPHONE_VOLUME</span><span class="k">}</span><span class="s2">% unmute 2: </span><span class="nv">$?</span><span class="s2">"</span> <span class="o">&gt;&gt;</span> /tmp/unmute.log
<span class="k">fi

if</span> <span class="o">[</span> <span class="nt">-n</span> <span class="s2">"</span><span class="nv">$PCM_VOLUME</span><span class="s2">"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
</span>amixer sset PCM,0 <span class="k">${</span><span class="nv">PCM_VOLUME</span><span class="k">}</span>% unmute 2&gt;/dev/null
<span class="nb">echo</span> <span class="s2">"amixer sset PCM,0 </span><span class="k">${</span><span class="nv">PCM_VOLUME</span><span class="k">}</span><span class="s2">% unmute 2: </span><span class="nv">$?</span><span class="s2">"</span> <span class="o">&gt;&gt;</span> /tmp/unmute.log
<span class="k">fi

if</span> <span class="o">[</span> <span class="nt">-n</span> <span class="s2">"</span><span class="nv">$MIC_VOLUME</span><span class="s2">"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
</span>amixer sset Mic,0 <span class="k">${</span><span class="nv">MIC_VOLUME</span><span class="k">}</span>% unmute cap 2&gt;/dev/null
<span class="nb">echo</span> <span class="s2">"amixer sset Mic,0 </span><span class="k">${</span><span class="nv">MIC_VOLUME</span><span class="k">}</span><span class="s2">% unmute 2: </span><span class="nv">$?</span><span class="s2">"</span> <span class="o">&gt;&gt;</span> /tmp/unmute.log
<span class="k">fi

if</span> <span class="o">[</span> <span class="nt">-n</span> <span class="s2">"</span><span class="nv">$CD_VOLUME</span><span class="s2">"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
</span>amixer sset CD,0 <span class="k">${</span><span class="nv">CD_VOLUME</span><span class="k">}</span>% unmute 2&gt;/dev/null
<span class="nb">echo</span> <span class="s2">"amixer sset CD,0 </span><span class="k">${</span><span class="nv">CD_VOLUME</span><span class="k">}</span><span class="s2">% unmute 2: </span><span class="nv">$?</span><span class="s2">"</span> <span class="o">&gt;&gt;</span> /tmp/unmute.log
<span class="k">fi

if</span> <span class="o">[</span> <span class="nt">-n</span> <span class="s2">"</span><span class="nv">$FRONT_VOLUME</span><span class="s2">"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
</span>amixer sset Front,0 <span class="k">${</span><span class="nv">FRONT_VOLUME</span><span class="k">}</span>% unmute 2&gt;/dev/null
<span class="nb">echo</span> <span class="s2">"amixer sset Front,0 </span><span class="k">${</span><span class="nv">FRONT_VOLUME</span><span class="k">}</span><span class="s2">% unmute 2: </span><span class="nv">$?</span><span class="s2">"</span> <span class="o">&gt;&gt;</span> /tmp/unmute.log
<span class="k">fi

</span><span class="nb">echo</span> <span class="s2">"Sound levels restored"</span> <span class="o">&gt;&gt;</span> /tmp/unmute.log
</code></pre></div></div>

<h2 id="step-2-generate-rcd">Step 2: Generate rc.d</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo chroot /opt/ltsp/i386
# update-rc.d unmute defaults
# exit
$ sudo ltsp-update-image
</code></pre></div></div>

<h2 id="step-3-configure-ltsconf">Step 3: Configure lts.conf</h2>

<p>Use the following settings for the particular client:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>VOLUME            = 100
PCM_VOLUME        = 100
MIC_VOLUME        = 100
CD_VOLUME         = 100
FRONT_VOLUME      = 100
</code></pre></div></div>

<h2 id="step-4-reboot-client">Step 4: Reboot client</h2>

<p>Reboot the client.  You can check that the script has run by looking at <code class="language-plaintext highlighter-rouge">/tmp/unmute.log</code> on the client.  You can get to the client by pressing Ctrl-Alt-F1 and logging in with the root password.</p>

<h2 id="references">References</h2>

<ul>
  <li>http://www.debian-administration.org/articles/28</li>
</ul>

       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP5 Clean Install</title>
      <link>https://chrisjrob.com/2009/01/24/ltsp5-clean-install/</link>
      <pubDate>Sat, 24 Jan 2009 00:00:00 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2009/01/24/ltsp5-clean-install</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <p>I have today started a clean install on a new server, and I am documenting the entire process; not just the LTSP install, but everything, from the installation of a virtualised Windows server, to the installation of KDE and end-user apps.</p>

<ul>
  <li><a href="/2010/03/30/ltsp5-install/">LTSP5 Install</a></li>
</ul>

       ]]>
      </description>
    </item>
    
    <item>
      <title>Solved PXE Booting the Viglen MPC-L</title>
      <link>https://chrisjrob.com/2008/08/28/solved-pxe-booting-the-viglen-mpc-l/</link>
      <pubDate>Thu, 28 Aug 2008 00:00:00 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2008/08/28/solved-pxe-booting-the-viglen-mpc-l</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/viglen-mpc-l.jpg" align="right" alt="Featured Image">
         
         <p>I have solved the <a href="/2008/08/28/pxe-booting-the-viglen-mpc-l/">issue with PXE booting on the Viglen MPC-L</a>!</p>

<p>To get past the kernel panic, it was necessary to switch of acpi in the kernel.  In LTSP that means copying the following file:</p>

<!--more-->

<p>N.B. Replace 00-00-00-00-00-00 with the MAC address of the Viglen but note it has to have the leading 01 at the beginning</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># cp /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/01-00-00-00-00-00-00
</code></pre></div></div>

<p>Then edit the file and add <code class="language-plaintext highlighter-rouge">acpi=off</code> to the end of the line (I also added <code class="language-plaintext highlighter-rouge">pnpbios=off</code> to reduce the boot-up error messages):</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>DEFAULT vmlinuz ro initrd=initrd.img quiet root=/dev/nfs ip=dhcp boot=nfs acpi=off pnpbios=off
</code></pre></div></div>

<p>And it now boots up fine.</p>

       ]]>
      </description>
    </item>
    
    <item>
      <title>PXE Booting the Viglen MPC-L</title>
      <link>https://chrisjrob.com/2008/08/28/pxe-booting-the-viglen-mpc-l/</link>
      <pubDate>Thu, 28 Aug 2008 00:00:00 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2008/08/28/pxe-booting-the-viglen-mpc-l</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/viglen-mpc-l.jpg" align="right" alt="Featured Image">
         
         <p>Persistence paid off, in that F1 will work, but it is a race between the detection of the USB keyboard and the completion of the boot loader.  I found that if I moved the cursor on the grub screen it paused, enabling me to Ctrl-Alt-Del, which seemed to enable to USB detection to complete quicker.  Or perhaps I was just lucky.  But in fact it’s immaterial as the PXE boot settings are not there, but are instead under Shift-F10, which seems to work fine.</p>

<!--more-->

<p>Unfortunately the PXE boot to LTSP ends in a kernel panic - but at least I am one step closer!</p>

       ]]>
      </description>
    </item>
    
    <item>
      <title>Viglen MPC-L</title>
      <link>https://chrisjrob.com/2008/08/27/viglen-mpc-l/</link>
      <pubDate>Wed, 27 Aug 2008 00:00:00 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2008/08/27/viglen-mpc-l</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/viglen-mpc-l.jpg" align="right" alt="Featured Image">
         
         <p>The Viglen MPC-L is a very small thin-client device, running Xubuntu with the XFCE desktop.  At £99 including VAT, this is a very inexpensive PC.  I recently listened to a review of the device on the <a href="http://podcast.ubuntu-uk.org/">Ubuntu UK Podcast</a>.  They described the device as slow, but explained that the Viglen MPC-L is really intended as a thin client device anyway.  I decided to order a test unit for evaluation, in the hope that it would work as a thin client for our LTSP server.</p>

<!--more-->

<p>My test unit has arrived, and I have added a review to my site, and include below for your interest…</p>

<p>First impressions are that the device is even smaller than I was expecting, it really is small enough to go on the back of a LCD panel; however the device is functional rather than attractive.  Sleek it is not.  Secondly I noticed that in common with many thin client devices there are no legacy keyboard and mouse ports, just USB (2 front and 2 back).  The device comes with a Viglen USB keyboard and Microsoft USB optical mouse, which are both fairly cheap and cheerful devices.</p>

<p>Next I connected it up and booted.  It was slow to boot - 2 minutes and 30 seconds.  On the flipside, once it is up power consumption is just 9 watts, increasing to 11 watts under load, so this is a device that can be left on.  Logging in only took another 10 seconds.</p>

<p>Once into Xubuntu, I noticed a desktop icon for “888M Volume” which apparently the standard user cannot mount, a minor point perhaps, but I would question why it is on the user’s desktop.</p>

<p>One disappointment is that the device only has a 40GB hard drive, as stated in the Ubuntu UK Podcast, but in contrast with the 80GB promised by Viglen Sales.  A further disappointment was the screen clarity which was a long way from being pin-sharp.  A quick <code class="language-plaintext highlighter-rouge">sudo dpkg-reconfigure xserver-xorg</code> increased the screen resolution from 1024x768 to 1280x1024, but as yet I have not managed to achieve a pin-sharp display on my AG Neovo S-19 LCD Panel.  Possibly that’s a limitation of the on-board graphics, but if so, health and safety would prevent its use in a corporate environment.  I will take this up with their support team.</p>

<p>I opened Firefox (another 20 seconds gone).  Flash isn’t installed, and given the sluggish browsing performance, I don’t think I’d be tempted to install it; but that does reduce the number of websites that can be accessed via this device.  Next I visited Googlemail; Googlemail took 30 seconds to load, but it was very sluggish to use.  Interestingly Viglen have also installed Opera, which was slightly quicker, probably the reason Viglen installed it.  I wonder whether they wouldn’t have been better installing Seamonkey?</p>

<p>The Viglen MPC-L comes with Abiword, Gnumeric and Gimp, which I believe are the default XFCE applications and probably a wise choice for a device this slow.</p>

<p>Interestingly Viglen state in their literature:</p>

<p><em>“Viglen have tuned and tweaked this distribution for optimal performance on the MPC through the use of  various  techniques  and  tricks.  Load  times  and  startup  times  have  been  greatly  reduced  through adaptive  analysis  techniques  and  removing  unnecessary  startup  scripts.”</em></p>

<p>Hmmm.</p>

<p>So as a standalone PC, it has few merits beyond size and price, but we must remember, that this is a £100 PC, and Viglen have been clear about the fact that this device is really designed to be a thin client.</p>

<p>So, with my corporate hat on, I looked for Citrix Presentation Server Client, the preferred method of connecting to a Citrix server.  Not installed.  Oh well, I guess most people will be connecting to an ordinary Microsoft Terminal Server via RDP.  Looked for an RDP application (krdc on KDE - anyone know for XFCE?), but couldn’t find one.  Okay, so any sysadmin is going to set up a desktop shortcut for rdesktop, but rdesktop is also not installed.  Only an apt-get away perhaps, but the minimum I would have thought for a device purporting to be a thin client device.  Next I looked for NoMachine’s NX client, again not installed.  VNC?  2X?  No.</p>

<p>If Viglen really want this device to be considered a thin client device, then those applications really ought to be there, and it would cost them nothing so to do, as all the software is free.  I installed rdesktop and was quickly able to connect to our virtualised W2K3 server, no problems there then.</p>

<p>I then decided to test the device as a thin client for LTSP.  So rebooted and tried to get into the BIOS.  The boot splash states F1 for Setup, but when you press it nothing happens, instead there is a message stating “VSA USB Enumeration” and the boot process continues regardless.  So configuring PXE booting is going to be a little difficult, perhaps impossible.  The inability to reach the BIOS screen must surely be a fault - and something that I will investigate further.</p>

<p>The problem with the Viglen MPC-L is that it is neither fish nor fowl - it is too slow to be seen as a viable PC, but it has not been properly set up to use as a thin client.  This means that the cost of these devices needs to include some not insignificant time for a sysadmin to install and configure the requisite software to access their server.</p>

<p>Criticisms aside, this is tremendously good value at £99 and an environmentally friendly device.  At the current promotional price of £80 it really is tremendous value for money, and if you deduct VAT and then a further £8 for the keyboard and mouse, then this device will cost a company just £60, an astonishing price.  For me, though, unless I can resolve the PXE issue, the device is going to be of little use.</p>

<p>Cheap, but not entirely cheerful.</p>


       ]]>
      </description>
    </item>
    
    <item>
      <title>A Flash Packbox</title>
      <link>https://chrisjrob.com/2008/08/01/a-flash-packbox/</link>
      <pubDate>Fri, 01 Aug 2008 00:00:00 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2008/08/01/a-flash-packbox</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/pack_box_350.jpg" align="right" alt="Featured Image">
         
         <p>Some time ago I bought the following kit:</p>

<ul>
  <li><a href="http://linitx.com/viewproduct.php?prodid=11791">Pack-box</a> £ 38.26</li>
  <li><a href="http://linitx.com/viewproduct.php?prodid=11111">Jetway J7F2 1.2Ghz Eden CN700 Mainboard - Fanless</a>  £ 87.55</li>
  <li><a href="http://linitx.com/viewproduct.php?prodid=11142">6-26V 60W picoPSU-60-WI</a> £ 27.55</li>
  <li><a href="http://linitx.com/viewproduct.php?prodid=10346">12V 60W AC Adapter</a> £ 19.06</li>
</ul>

<p>With the intention of attaching them to the underside of showroom desks as an LTSP Client.  Unfortunately they don’t provide anywhere for an optical drive, which our MD felt was essential.  So what to do with it?  Well, I decided to try and set it up as a low-wattage PC for potential use in a car, caravan, boat, or simple a green PC for home use.  To that end I purchased the following additional items:</p>

<!--more-->

<ul>
  <li><a href="http://linitx.com/viewproduct.php?prodid=10448">Compact Flash IDE Adapter on PCI Mounting Bracket</a> £ 15.34</li>
  <li><a href="http://www.dabs4work.com/productview.aspx?QuickLinx=4S39">Kingston 8GB Ultimate Compact Flash 266x</a> £ 63.47</li>
</ul>

<p>So the total cost of the system was £ 251.23 + VAT = £ 295.19.  Not a cheap system, but the amazing thing about it is the huge range of power input from 6V through to 26V, which means you don’t need a voltage regulator for this PC to work in a car, boat or caravan.</p>

<p>A word about Compact Flash - there are two important things to discover before purchasing Compact Flash:</p>

<ol>
  <li><em>Speed:</em> Speed is expensive, but to have a system that compares favourably with a traditional hard-drive you need speed - 266x is recommended</li>
  <li><em>Life expectancy:</em> Flash drives have a finite number of write cycles, and therefore you need a drive that has “wear levelling”.</li>
</ol>

<p>Whilst Kingston advertise that their drives include wear levelling, I probably would have been safer to purchase a Industrial Flash Drive available from LinITX.  At the time of writing LinITX did not offer any 8GB drives, and their 4GB drives were comparable in cost to the 8GB drive from Dabs.  Only time will tell whether this was a mistake.</p>

<p>My next problem was how to install without an optical drive.  In the end I followed <a href="https://help.ubuntu.com/community/Installation/FromUSBStick">these instructions</a> and chose UNetBootin method, although I found that I did have to follow the additional steps required.</p>

<p>From that point on the installation was no more difficult than a traditional live CD install; however I did configure tmpfs file systems in <code class="language-plaintext highlighter-rouge">/etc/fstab</code> in order to reduce disk-writes.</p>

<p>Now I just need to find a use for it!</p>


       ]]>
      </description>
    </item>
    
    <item>
      <title>The Green Icons are breeding</title>
      <link>https://chrisjrob.com/2008/07/15/the-green-icons-are-breeding/</link>
      <pubDate>Tue, 15 Jul 2008 00:00:00 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2008/07/15/the-green-icons-are-breeding</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/italc_icon.png" align="right" alt="Featured Image">
         
         <p>Following the <a href="/2009/04/24/ltsp-install-italc-on-debian-etch/">installation of Italc on our LTSP Server</a>, users reported that they had several green icons in their system tray.  This transpired to be the KDE session manager, which automatically restores all applications running at time of logging-off.  I have updated my Install Italc instructions to include excluding ica from KDE session manager.</p>

<!--more-->

<p>In trying to kill off the multiple ica processes, I found that <code class="language-plaintext highlighter-rouge">ps</code> can do more than just <code class="language-plaintext highlighter-rouge">ps aux</code>.  I found that <code class="language-plaintext highlighter-rouge">ps -fHu username</code> would provide a tree-view of the specified user, which is much neater than piping ps through grep.</p>

<p>And then our <code class="language-plaintext highlighter-rouge">/tmp</code> filesystem filled up, and I just simply could not work out why.  Until, at least, I managed to trash our virtualised Windows Server 2003 (running under Qemu), by inadvertently disabling its network card and thus triggering the server monitoring - which automatically killed and restarted it; 600mb freed up in a second.</p>

       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | The Continuing Saga of LTSP Screen Shadowing</title>
      <link>https://chrisjrob.com/2008/07/14/the-continuing-saga-of-ltsp-screen-shadowing/</link>
      <pubDate>Mon, 14 Jul 2008 00:00:00 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2008/07/14/the-continuing-saga-of-ltsp-screen-shadowing</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/italc.jpg" align="right" alt="Featured Image">
         
         <p>This turned out to be a complete nightmare, and took several days to resolve.  I never did manage to get x11vnc working on the client, nor did I manage to get italc (which I think also uses x11vnc) working on the client.  In the end I settled for installing italc-client on the server, so that the client runs when users log onto the server, allocating each user a unique port, and putting a little green italc icon in their system tray.</p>

<!--more-->

<p>This required upgrading qt4 from lenny (hardly ideal) and still works like a pig.  Well viewing is fine, but the remote control is unusably slow.</p>

<p>I found it impossible to manage the list of users in italc; which changes according to the whims of DHCP.  I ended up writing a script to use the output of “who” to populate the <code class="language-plaintext highlighter-rouge">globalconfig.xml</code> file in <code class="language-plaintext highlighter-rouge">/home/username/.italc</code>; if I have time I will add the script to my install italc instructions.</p>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | Wireless Access to LTSP</title>
      <link>https://chrisjrob.com/2008/07/11/ltsp-wireless-access/</link>
      <pubDate>Fri, 11 Jul 2008 07:38:51 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2008/07/11/ltsp-wireless-access</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/lucent-ethernet-converter.jpg" align="right" alt="Featured Image">
         
         <h2 id="the-issue">The Issue</h2>

<p>Currently the only method of accessing LTSP from a wireless device (e.g. laptop) is by running the local operating system and installing NoMachine on the client.  It would be extremely useful to boot laptops directly into LTSP.</p>

<!--more-->

<h2 id="the-options">The Options</h2>

<p>The following two pages would seem to outline the possibilities:</p>

<ul>
  <li>http://www.ltsp.org/twiki/bin/view/Ltsp/WirelessLtsp
    <ul>
      <li>http://www.ltsp.org/twiki/bin/view/Ltsp/WirelessLTSPClientsUsingAnEthernetBridge</li>
    </ul>
  </li>
</ul>

<p>I cannot help but conclude that, time being an important factor, the Ethernet Bridge option is the sensible course to take.</p>

<h2 id="proof-of-concept">Proof of Concept</h2>

<p>As it happened, I had an old Lucent Wireless Ethernet Converter, sadly only a 10-base-T model.  I configured it with a static IP address, and attached it to my laptop’s network port.  Rebooted my laptop and, joy of joys, it immediately PXE booted.  Unfortunately it was painfully slow, so a better device is clearly required.</p>

<h2 id="possible-wireless-bridges">Possible Wireless Bridges</h2>

<ul>
  <li><a href="http://www.expansys.com/d.aspx?i=156998">ASUS WL330GE Wireless Access Point</a></li>
  <li><a href="http://www.dabs4work.com/productview.aspx?Quicklinx=30HT">Linksys model number WET54G</a></li>
  <li><a href="http://www.dabs4work.com/productview.aspx?quicklinx=3XB9">Belkin Wireless G Ethernet Adapter F5D7330uk</a></li>
  <li><a href="https://www.dabs4work.com/productview.aspx?QuickLinx=3XB9">Buffalo Wireless Ethernet Controller WLI-TX4-G54HP-1</a></li>
</ul>

<p>After initially opting for the Belkin, I ended up opting for the Buffalo, largely off the back of some decent reviews.</p>

<h2 id="buffalo-wireless-ethernet-controller">Buffalo Wireless Ethernet Controller</h2>

<p>My <a href="https://www.dabs4work.com/productview.aspx?QuickLinx=3XB9">Buffalo Wireless Ethernet Controller WLI-TX4-G54HP-1</a> arrived today, so I eagerly installed it at home.  As usual there is no configurator for Linux, so you have to use the web-admin page, this requires you to connect via a wired port configured for the same network 1.1.1.0/24.  Once done it was very simple to configure - I gave it a static IP (not sure whether that was really required) and rebooted into Edubuntu.</p>

<p>Very straightforward, but the performance, whilst infinitely better than my old Lucent Ethernet Converter described in my <a href="#proof-of-concept">Proof of Concept</a>, was less than stunning.  Launching Gcompris, struggled with the music, but once the music was switched off the moving images and sound seemed fine.  Gnome seems a little sluggish at times, but probably quicker than my ageing Dell Inspiron 8200 is normally!</p>

<p>I guess I would describe performance of Edubuntu via Wireless as satisfactory - but if you require sound/video I think you’ll struggle.  That said it is a useful additional method of accessing LTSP and will no doubt have its place at work, e.g. adhoc workstations.</p>

<h2 id="references">References</h2>

<ul>
  <li>http://www.ltsp.org/twiki/bin/view/Ltsp/WirelessLtsp
    <ul>
      <li>http://www.ltsp.org/twiki/bin/view/Ltsp/WirelessLTSPClientsUsingAnEthernetBridge</li>
    </ul>
  </li>
  <li>http://www.lug-kr.de/wiki/ThinClientLokalBooten
    <ul>
      <li>http://translate.google.co.uk/translate?u=http%3A%2F%2Fwww.lug-kr.de%2Fwiki%2FThinClientLokalBooten&amp;sl=de&amp;tl=en&amp;hl=en&amp;ie=UTF-8</li>
    </ul>
  </li>
</ul>

       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | Screen Shadowing</title>
      <link>https://chrisjrob.com/2008/07/10/screen-shadowing/</link>
      <pubDate>Thu, 10 Jul 2008 00:00:00 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2008/07/10/screen-shadowing</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <p>Something that we have become used to having under Citrix is the ability to shadow users, and I have been missing this since our forays into LTSP.  I know it is possible, and I have been attempting to use the KDE built-in Krfb Desktop Sharing module.  The problem with this has been that, all users being on the same hardware, it’s difficult to know to which screen number to connect.  I guess there probably is a way, but when I used trial and error to find the right display, the performance was less than impressive.</p>

<!--more-->

<p>So I decided to follow the masses and install x11vnc on the client, but suffice don’t have it working yet!</p>

<p>You may recall my recent installation of Edubuntu at home.  Well I was surprised to find that the Thin Client Manager, AKA the Student Control Panel, missing.  I Googled without joy, and ended up finding that thin-client-manager-gnome needed to be installed via Synaptic.  I reported this at #edubuntu and ogra informed that they have replaced this with <a href="http://italc.sourceforge.net/">iTalc</a>.  I therefore removed thin-client-manager-gnome, but again I could not find any reference to iTalc in the menus.  Again I Googled fruitlessly and again the solution was as simple as installing italc-master (the client was already installed).  And it worked, straight off including screen shadowing.</p>

<p>Now all I need to do is to work out <a href="/2009/04/24/ltsp-install-italc-on-debian-etch/">how to install iTalc on Etch</a>!  Perhaps not.  At least not just yet.</p>


       ]]>
      </description>
    </item>
    
    <item>
      <title>Edubuntu LTSP via Wireless Laptop Again</title>
      <link>https://chrisjrob.com/2008/07/09/edubuntu-ltsp-via-wireless-laptop-again/</link>
      <pubDate>Wed, 09 Jul 2008 00:00:00 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2008/07/09/edubuntu-ltsp-via-wireless-laptop-again</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/buffalo-wireless-controller.jpg" align="right" alt="Featured Image">
         
         <p>My <a href="https://www.dabs4work.com/productview.aspx?QuickLinx=3XB9">Buffalo Wireless Ethernet Controller WLI-TX4-G54HP-1</a> arrived today, so I eagerly installed it at home.  As usual there is no configurator for Linux, so you have to use the web-admin page, this requires you to connect via a wired port configured for the same network 1.1.1.0/24.  Once done it was very simple to configure - I gave it a static IP (not sure whether that was really required) and rebooted into Edubuntu.</p>

<!--more-->

<p>Very straightforward, but the performance, whilst infinitely better than my old Lucent Ethernet Converter, was less than stunning.  Launching Gcompris, struggled with the music, but once the music was switched off the moving images and sound seemed fine.  Gnome seems a little sluggish at times, but probably quicker than my ageing Dell Inspiron 8200 is normally!</p>

<p>I guess I would describe performance of Edubuntu via Wireless as satisfactory - but if you require sound/video I think you’ll struggle.  That said it is a useful additional method of accessing LTSP and will no doubt have its place at work, e.g. ad-hoc workstations.</p>


       ]]>
      </description>
    </item>
    
    <item>
      <title>A frustrating day</title>
      <link>https://chrisjrob.com/2008/07/08/a-frustrating-day/</link>
      <pubDate>Tue, 08 Jul 2008 00:00:00 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2008/07/08/a-frustrating-day</guid>
      <description>
       <![CDATA[
         
         <p>Just when I thought I’d got our LTSP server running sweetly, I received a number of complaints from users complaining about poor performance on the Windows applications, in particular Internet Explorer.  It seemed that almost everyone had three or more IE windows open, all for sites that can only be accessed via IE.  Many of the users weren’t at their desks, but despite this IE still managed to consume massive amounts of CPU.  The Windows server was topping out and performance was suffering as a result.  I managed to log off a couple of disconnected users, which helped.  Needless to say, blaming Microsoft didn’t cut much mustard.</p>

<!--more-->

<p>Then one user, running a simple shell application using kdialog, started seeing kdialog sessions spiralling wildly out of control, in the end we had hundreds, possibly thousands, of kdialogs running.  It transpired that the application was supposed to talk to the user’s scanner, but couldn’t and therefore kept forking another error message ad infinitum.</p>

<p>So the day ended with two additional items for my to-do list:</p>

<ol>
  <li>Fix scanning</li>
  <li>Sort out Windows load</li>
</ol>

<p>On the plus side I did manage to get somewhere with a long-standing issue of <a href="/2009/03/21/open-multipage-tiffs-in-kde/">open multipage tiffs in kde</a>.</p>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | Edubuntu via Wireless Laptop</title>
      <link>https://chrisjrob.com/2008/07/07/edubuntu-via-wireless-laptop/</link>
      <pubDate>Mon, 07 Jul 2008 00:00:00 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2008/07/07/edubuntu-via-wireless-laptop</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/lucent-ethernet-converter.jpg" align="right" alt="Featured Image">
         
         <p>Tonight I installed edubuntu-desktop from the <a href="https://www.edubuntu.org">Edubuntu</a> add-ons CD - didn’t take very long and very pretty it was too, once I rebooted.</p>

<p>Next I wanted to see if I could get my laptop working wirelessly.  I had an old Lucent Wireless Ethernet Converter, sadly only a 10-base-T model.  Configured it with a static IP address, and attached it to my laptop’s network port.  Rebooted and, joy of joys, it immediately PXE booted off the Edubuntu server.</p>

<!--more-->

<p>Unfortunately it was painfully slow, but nevertheless a great proof of concept for Wireless access to LTSP.</p>

<p>Now I just need to order a decent modern Wireless bridge and hopefully we’ll have decent wireless LTSP!</p>


       ]]>
      </description>
    </item>
    
    <item>
      <title>Ubuntu LTSP - how the other half live?</title>
      <link>https://chrisjrob.com/2008/07/06/ubuntu-ltsp-how-the-other-half-live/</link>
      <pubDate>Sun, 06 Jul 2008 00:00:00 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2008/07/06/ubuntu-ltsp-how-the-other-half-live</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/edubuntu_8.04.png" align="right" alt="Featured Image">
         
         <p>Having a brand new HP ML115 Server which I bought new for £107, I decided to have a play with <a href="http://www.ubuntu.com/">Ubuntu</a> LTSP at home.  Actually I decided on <a href="https://www.edubuntu.org/">Edubuntu</a>, as I wanted to investigate the thin client management which I believe are included.</p>

<p>I downloaded the <a href="http://www.ubuntu.com/download/alternative-downloads">Ubuntu Alternate CD</a> and burned it to disk.  I booted the server onto the CD, missed the fact that I needed to hit F4 Modes and select LTSP before selecting install, whereon I wasted an hour installing Ubuntu-ordinaire.</p>

<!--more-->

<p>Second attempt was pretty straightforward, but, only having a single network card, it warned me to edit <code class="language-plaintext highlighter-rouge">/etc/ltsp/dhcpd.conf</code>.  Booted into Ubuntu without a problem and opened my router’s web interface and cribbed the DHCP settings and DNS settings into <code class="language-plaintext highlighter-rouge">/etc/ltsp/dhcpd.conf</code>.  Switched off the DHCP on my router.  Set-up the server static IP address via the Gnome network manager.  Restarted DHCP with <code class="language-plaintext highlighter-rouge">/etc/init.d/dhcp3-server restart</code>.</p>

<p>Tested a client and got the “workstation not authorized”.</p>

<p>Ran <code class="language-plaintext highlighter-rouge">sudo ltsp-update-sshkeys</code> and <code class="language-plaintext highlighter-rouge">sudo ltsp-update-image</code>, rebooted the client and it worked beautifully, by which I mean that the laptop’s full 1600x1200 resolution was detected, and sound kicked in immediately.</p>

<p>So, even with the false starts, I managed to install a working Ubuntu LTSP server with all the bells and whistles in two and a half hours.  And I could have done it at least an hour quicker than that.  I know Ubuntu come in for some criticism, but that really is impressive usability.  To be fair, I was helped by having knowledge of LTSP, DHCP, and Debian, but supposedly a second network card would have enabled the whole kit-and-kaboodle to work out of the box.</p>

<p>Tomorrow I will have a crack at installing the Edubuntu-Desktop!</p>

<p>Good night.</p>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LTSP 4.2 or LTSP 5</title>
      <link>https://chrisjrob.com/2008/07/05/ltsp42-or-ltsp5/</link>
      <pubDate>Sat, 05 Jul 2008 00:00:00 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2008/07/05/ltsp42-or-ltsp5</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <p>Having agonised about the correct version of LTSP to install, chosen the wrong one, and upgraded, I thought it would be worthwhile to type up my thoughts on the subject. There are two versions of LTSP currently available:</p>

<ul>
  <li>LTSP4.2</li>
  <li>LTSP5</li>
</ul>

<p>If you visit the LTSP website, then you can’t help but notice that <em>all</em> the information is on LTSP4.2.  If you do some Googling about LTSP5, you will quickly determine that LTSP5 is full of problems, at an early stage of development and best avoided.</p>

<p>Wrong, wrong, wrong.  You are just about to make a mistake.</p>

<!--more-->

<p>In fact LTSP5 is the current version and has been since 2006.  Indeed, if you try and seek any help in respect of version 4.2, and you will invariably get the response - <em>“LTSP4.2 is obsolete, unmaintained and you are an idiot to have installed it”</em>.</p>

<p>Okay I exaggerate, but not by much!  If you <em>do</em> install 4.2, at some point you are going to want to update the client.  Well that requires LBE (read the Wiki for details) - then you will hit the problem that LBE is broken and will not install.  You’ll ask for help and the response you will receive is pretty much as above.</p>

<p>Good luck sorting <em>that</em> little problem out, for myself I upgraded to LTSP5 (see <a href="/2010/06/25/ltsp5-upgrade/">LTSP5 Upgrade</a>) and I have never looked back.  The client is up-to-date and configurable, the local devices work, sound works, and little fluffy bunny rabbits nibble the grass while the sun shines.</p>

<p>In short all his just fine and dandy in the world of LTSP5.  Always assuming it’s been packaged for your distro, it has for Debian and Ubuntu, for the rest you’ll need to make your own enquiries.</p>

<h2 id="what-you-can-expect-from-ltsp42">What you can expect from LTSP4.2</h2>

<h3 id="positives">Positives</h3>

<p>A working reliable system.  Sound (see <a href="/2009/03/21/ltsp4.2-sound/">LTSP4.2 Sound</a>).  Local Devices that appear on the desktop when you plug them in.  Works particularly well for older clients (Pentium II with 32mb RAM).</p>

<h3 id="negatives">Negatives</h3>

<p>Expect to fight any PC built in the last two or three years.  Expect to have battles getting sound working on your clients (usually solvable, usually you have wounds to lick afterwards).  I am told that USB keys don’t work quite as well, although I never found any problem in this area.  Indeed I managed to get USB keys working better under LTSP4.2 than I have subsequently managed to do in LTSP5.</p>

<h2 id="what-you-can-expect-from-ltsp5">What you can expect from LTSP5</h2>

<p>A system that pretty much works as you expect.  Sound was simple to configure and works well.  Scanning took a little bit of working out - see <a href="/2009/11/18/ltsp5-scanning/">LTSP Scanning</a>.
Local devices work just fine (with the exception of some incorrectly partitioned devices).  The client system works very well, although I am still learning exactly how it all hangs together.  Newer PCs work perfectly, and all but the oldest PCs seem fine.  The ones I did have to get rid of were no great loss; but if you feel differently then I understand it is technically possible to install LTSP4.2 and LTSP5 on the same server, and get the benefits of each.  You’ll need to search the LTSP Mailing List to find out how.</p>

<p>I understand that it is even conceivable to deliver a full-blown desktop client system - although you need LDAP on your network to enable client logon.  Again, search the LTSP Mailing List for details.</p>


       ]]>
      </description>
    </item>
    
    <item>
      <title>Changes to the website</title>
      <link>https://chrisjrob.com/2008/07/05/changes-to-the-website/</link>
      <pubDate>Sat, 05 Jul 2008 00:00:00 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2008/07/05/changes-to-the-website</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <p>I can’t believe a week has passed, with no blog entry.  Apologies.</p>

<p>This week I have added my About Linux and About Windows pages, including Why Linux and Protecting your Windows PC.  I hope that these pages will help users to recognise the issues running Windows systems and consider using Linux instead.  I have also moved my Windows for Linux page under the About Linux.  Still don’t think I have the site layout quite right yet, so don’t be surprised if they all move around again!</p>

<!--more-->

<p>This week has seen a big push to get our last Windows users over to LTSP.  It’s gone pretty well, although we still have problems printing to our <a href="/2008/07/05/konica-minolta-c250-printing-problems/">Konica Minolta C250 photocopier</a>.  I have three users remaining, all three of which will prove the greatest challenge, but also the greatest opportunity - in some ways they have the most to gain from Linux.  They just don’t know it yet!</p>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | Scanning</title>
      <link>https://chrisjrob.com/2008/06/24/ltsp-scanning/</link>
      <pubDate>Tue, 24 Jun 2008 00:00:00 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2008/06/24/ltsp-scanning</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <p>Since upgrading to LTSP5, our scanning has ceased to work.  I have created a Work in Progress page called <a href="/2009/11/18/ltsp5-scanning/">LTSP5 Scanning</a>.  Having worked through the instructions contained on that page, scanning is still not working.  The logs show that the request <code class="language-plaintext highlighter-rouge">scanimage -L</code> is being detected by the client and the client is confirming that the LTSP server has permission, but it is then failing with:</p>

<!--more-->

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Jun 24 12:16:55 juno scanimage: unable to open /var/run/hplip/hpssd.port: No such file or directory: prnt/hpijs/hplip_api.c 94
Jun 24 12:16:55 juno scanimage: unable to connect hpssd socket 50002: Connection refused: prnt/hpijs/hplip_api.c 719
</code></pre></div></div>

<p>Not realising that HP had any involvement in scanning on Linux, I assumed that this was a port conflict with some utilities installed on our HP server, but reading into the matter further I believe that this is because the client has detected that the scanner is an HP model and has attempted to run an HP scan utility that is not installed on the client.  Just guesses, if you have any ideas, please contact me.  Any useful messages will be posted here!</p>

       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | About LTSP</title>
      <link>https://chrisjrob.com/2008/06/24/about-ltsp/</link>
      <pubDate>Tue, 24 Jun 2008 00:00:00 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2008/06/24/about-ltsp</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <h2 id="what-is-the-linux-terminal-server-project-ltsp">What is the Linux Terminal Server Project (LTSP)</h2>

<p>If you come from a Windows background, you may be familiar with Windows Terminal Services and/or Citrix.  Windows Terminal Services basically enables users from different clients to connect to servers and work concurrently on them using the RDP (Remote Desktop) protocol.  Perhaps you’ve connected to your work PC using Remote Desktop - it’s the same thing, just Terminal Services just allows multiple users to connect concurrently.  Citrix is just the same, but uses the ICA protocol.</p>

<!--more-->

<p>Big Deal.  All Linux machines are inherently multi-user machines and all Linux machines can accept concurrent connections, either using X directly, or using <code class="language-plaintext highlighter-rouge">ssh -XC ~serverip~</code> (the -X switch enables the X-forwarding so that you have a GUI and the -C switch compresses the data stream which generally improves performance, particularly over low-bandwidth connections).</p>

<p>LTSP goes a massive step further, in that it actually serves a complete operating system to the client.  This means that the client hardware does not require a host operating system, or even a hard drive; instead the client PXE boots over the network, downloading the operating system, installs it, configures it, boots it, and finally runs a login manager to provide a secure login to the server.</p>

<p>In contrast, a Windows thin client usually includes a flash disk with a local operating system.  LTSP does not need this, all LTSP requires is a PXE compatible network card and a pretty minimal amount of RAM and CPU (a Pentium II with 64mb is probably the minimum required).</p>

<h2 id="benefits-of-ltsp">Benefits of LTSP</h2>

<ul>
  <li>Performance
    <ul>
      <li>LTSP requires around half the processing power - for same performance as Windows Server
        <ul>
          <li>See Server Sizing for more information</li>
        </ul>
      </li>
      <li>LTSP requires around half the memory - for same load as Windows Server
        <ul>
          <li>See Server Sizing for more information</li>
        </ul>
      </li>
      <li>LTSP doesn’t require on-access virus scanning - because Linux is inherently secure</li>
      <li>LTSP runs fast on Pentium II hardware (say Pentium III for LTSP5)</li>
      <li>LTSP clients boot fast</li>
    </ul>
  </li>
  <li>Reliability
    <ul>
      <li>LTSP will run for longer between reboots - months not weeks</li>
      <li>PC hard disks can be removed to enable silent running</li>
    </ul>
  </li>
  <li>Simplicity
    <ul>
      <li>No host operating system - boots Linux directly over the network</li>
    </ul>
  </li>
  <li>Functional
    <ul>
      <li>Attractive modern desktop</li>
      <li>Copes with sound and video (depending on client hardware)</li>
      <li>Copes with local CDROM and flash memory (depending on client hardware)</li>
    </ul>
  </li>
  <li>Cost
    <ul>
      <li>No need for wholesale PC replacement</li>
      <li>Hardware-only cost</li>
      <li>Can afford to over-spec the servers for phenomenal performance</li>
    </ul>
  </li>
</ul>

<h2 id="problems-with-ltsp">Problems with LTSP</h2>

<ul>
  <li>Requires a fast-Ethernet or Gigabit network - Install FreeNX for serving desktops to remote locations</li>
  <li>Incompatible with Windows applications - see Windows for Linux for guidance</li>
</ul>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | LDM password expiry problem</title>
      <link>https://chrisjrob.com/2008/06/23/ldm-password-expiry-problem/</link>
      <pubDate>Mon, 23 Jun 2008 00:00:00 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2008/06/23/ldm-password-expiry-problem</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <p>I have had my first user’s password expire since our <a href="/2010/06/25/ltsp5-upgrade/">LTSP5 Upgrade</a>.</p>

<ol>
  <li>User enters username and hits enter</li>
  <li>User enters password and hits enter</li>
  <li>LDM tells user password has expired enter new password</li>
  <li>User enters new password and hits enter</li>
  <li>LDM tells user to verify password</li>
  <li>User enters new password again and hits enter</li>
</ol>

<!--more-->

<p>And then it enters a crazy loop where it just continually prompts for the password.  If you reboot the client you start from the beginning again, so clearly the password change has not been accepted.  I confidently told user that he had obviously entered his password incorrectly - I then rebooted the client and did exactly the same myself.  I believe this could be a bug, and I suspect it may be related to the following thread:</p>

<ul>
  <li><a href="http://marc.info/?t=121069447400001&amp;r=1&amp;w=2">ldm problems with debian etch</a></li>
</ul>


       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | Sound on Compaq ENSFF PCs</title>
      <link>https://chrisjrob.com/2008/06/21/ltsp-sound-on-compaq-ensff-pcs/</link>
      <pubDate>Sat, 21 Jun 2008 00:00:00 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2008/06/21/ltsp-sound-on-compaq-ensff-pcs</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <p>We have a number of Compaq Deskpro ENSFF P450s for which sound stopped working since our <a href="/2010/06/25/ltsp5-upgrade/">LTSP5 Upgrade</a>.  I spent some time this morning solving this problem and have detailed <a href="#configure-compaq-deskpro-ensff-for-ltsp5-sound">my solution below</a>.</p>

<p>The bulk of the fix was simply changing <code class="language-plaintext highlighter-rouge">SMODULE_01</code> to <code class="language-plaintext highlighter-rouge">MODULE_01</code> in LTS.conf, although this particular PC was a little more involved.</p>

<!--more-->

<h2 id="configure-compaq-deskpro-ensff-for-ltsp5-sound">Configure Compaq Deskpro ENSFF for LTSP5 Sound</h2>

<h3 id="introduction">Introduction</h3>

<p>We have a number of Compaq Deskpro EN-SFF P450 PCs.  These are small-form-factor Pentium IIIs with Compaq quality.  I believe these have the ESS1869 soundcard.</p>

<p><strong>The BIOS settings on our PCs are io=0x220 irq=5 dma=1 dma16=5; your settings may be different!</strong></p>

<h2 id="ltsp42">LTSP4.2</h2>

<p>They worked flawlessly under LTSP4.2 with the following LTS.conf configuration:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>SMODULE_01         = "snd-es18xx irq=5"
</code></pre></div></div>

<p>Since upgrading to LTSP5, sound has ceased to function.</p>

<h2 id="testing">Testing</h2>

<p>I booted the client and typed [Ctrl]+[Alt]+[F1] to bring up the client console and typed:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># lsmod | grep snd
</code></pre></div></div>

<p>Which returned nothing, showing that sound was definitely not loaded (no surprise there!).</p>

<p>Next I tried typing:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># modprobe snd-es18xx
ESS AudioDrive ES18xx soundcard not found or device busy
FATAL: Error inserting snd_es18xx (/lib/modules/2.6.18-6-486/kernel/sound/isa/snd-es18xx.ko): No such device
</code></pre></div></div>

<h2 id="research">Research</h2>

<table>
  <tbody>
    <tr>
      <td>Next I Googled “(ltsp5</td>
      <td>edubuntu) snd-es18xx” which produced the following thread:</td>
    </tr>
  </tbody>
</table>

<ul>
  <li>http://ubuntuforums.org/showthread.php?t=148077</li>
</ul>

<p>This was not specific to LTSP5, nevertheless it gave a useful configuration:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/etc/modprobe.d/alsa-base

alias char-major-116 snd
alias snd-card-0 snd-es18xx
options snd-es18xx index=0 enable=1 isapnp=0 port=0x220 mpu_port=0x388 fm_port=0x330 irq=5 dma1=1 dma2=0

alias char-major-14 soundcore
alias sound-slot-0 snd-card-0

alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss
</code></pre></div></div>

<p>In particular the following line looked useful:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>options snd-es18xx index=0 enable=1 isapnp=0 port=0x220 mpu_port=0x388 fm_port=0x330 irq=5 dma1=1 dma2=0
</code></pre></div></div>

<p>Still in the client console I typed:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># modprobe snd-es18xx index=0 enable=1 isapnp=0 port=0x220 mpu_port=0x388 fm_port=0x330 irq=5 dma1=1 dma2=0
</code></pre></div></div>

<p>And the sound module loaded fine.  I then ran:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># speaker-test
speaker-test 1.0.13
Playback device is default
Stream parameters are 48000Hz, S16_LE, 1 channels
Using 16 octaves of pink noise
...
</code></pre></div></div>

<p>And sound was working fine.</p>

<h2 id="ltsconf">LTS.conf</h2>

<p>So obviously all we need to do is to set in LTS.conf and we should be sorted:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>SMODULE_01         = "snd-es18xx index=0 enable=1 isapnp=0 port=0x220 mpu_port=0x388 fm_port=0x330 irq=5 dma1=1 dma2=0"
</code></pre></div></div>

<p>But no joy!  Thinking that the issue was with an incompatibility with one of the above switches and LTSP, I experimented with removing all the switches and just adding some back; the aim being to end up with a minimal set of switches that worked.  On a hunch I tried:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># modprobe snd-es18xx isapnp=0
</code></pre></div></div>

<p>And the speaker-test worked.  Adding this to LTS.conf</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>SMODULE_01         = "snd-es18xx isapnp=0"
</code></pre></div></div>

<p>And it <em>still</em> didn’t work.  For some reason, that I cannot find documented, SMODULE is no longer working, and needs replacing with MODULE - thus:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>MODULE_01         = "snd-es18xx isapnp=0"
</code></pre></div></div>

<p>All now working.</p>

       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | Sound problem fixed</title>
      <link>https://chrisjrob.com/2008/06/18/sound-problem-fixed/</link>
      <pubDate>Wed, 18 Jun 2008 00:00:00 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2008/06/18/sound-problem-fixed</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <p>Further to <a href="/2008/06/17/ltsp-sound-in-rdesktop-sessions/">my recent post</a>, it transpired that rdesktop uses <code class="language-plaintext highlighter-rouge">/dev/dsp</code> which is incompatible with alsa.  Specifying “oss” as the sound driver, instead of the default, worked fine.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ padsp rdesktop -r sound:local:oss 192.168.0.1
</code></pre></div></div>

<!--more-->

<p>This is apparently because rdesktop version 1.5 does not support alsa, but still uses <code class="language-plaintext highlighter-rouge">/dev/dsp</code> as the sound device.  A new version 1.6 of rdesktop is now available (albeit not in the debian etch or etch-backports repositories), which should address this issue.  Unfortunately we are using a patched version of rdesktop, provided by fontis, and I know they were struggling to integrate their patches into the latest versions.  I should probably attempt to contact them at some point.</p>

<p>This also represented my first attempt at using IRC #ltsp - which proved invaluable.  Installed Konversation, as I could not get on with Kirc.</p>

       ]]>
      </description>
    </item>
    
    <item>
      <title>LTSP | Sound in rdesktop sessions</title>
      <link>https://chrisjrob.com/2008/06/17/ltsp-sound-in-rdesktop-sessions/</link>
      <pubDate>Tue, 17 Jun 2008 00:00:00 +0000</pubDate>
      <author>chrisjrob@gmail.com (Chris Roberts)</author>
      <guid>https://chrisjrob.com/2008/06/17/ltsp-sound-in-rdesktop-sessions</guid>
      <description>
       <![CDATA[
         
           <img src="https://chrisjrob.com/assets/ltsp_logo.png" align="right" alt="Featured Image">
         
         <p>Today I discovered that since our upgrade to LTSP5, sound has stopped working in rdesktop sessions.  Worse, it bombs users out of their Windows session with the error:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>rdesktop: pcm_params.c:2351: sndrv_pcm_hw_params: Assertion `err &gt;= 0' failed.
Aborted
</code></pre></div></div>

<!--more-->

<p>Under 4.2 it was working beautifully simply by prefixing rdesktop with esddsp, 
e.g.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ esddsp rdesktop -r sound:local 192.168.0.1
</code></pre></div></div>

<p>But removing esddsp or replacing with padsp causes exactly the same error 
message.  I suspect with alsa the esddsp/padsp fix is no longer required, but 
why does it not work?</p>

<p>I have even tried pointing padsp at the client pulseaudio device…</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ padsp -d -s 192.168.0.41:4713 -n rdesktop rdesktop -r sound:local 192.168.0.1
</code></pre></div></div>

<p>I have posted this as <a href="http://sourceforge.net/p/ltsp/mailman/message/19679055/">a question on the LTSP Mailing List</a> and am hopeful of a solution!</p>


       ]]>
      </description>
    </item>
    
  </channel> 
</rss>
