Uso das funções plot() e plot3d() do Scilab a partir de terminal LTSP

scilab-plot-ltsp

 

Trata-se do mal funcionamento das funções plot() e plot3d() do Scilab, quando utilizadas a partir de terminal thinclient LTSP executando imagem do S.O. Ubuntu 14.04 para se conectar em servidor LTSP executando S.O. Ubuntu 14.04 com ambiente gráfico Gnome ou Xfce.

As funções plot() e plot3d() do Scilab funcionam se a opção LDM_DIRECTX for definida para “False” no arquivo /var/lib/tftpboot/ltsp/i386/lts.conf (este arquivo reside no servidor LTSP ou no servidor de boot, no caso do projeto LTSP-Cluster). Entretanto, esta alteração habilita a encriptação na comunicação do terminal com o servidor LTSP, comprometendo o desempenho da sessão de área de trabalho remota como um todo e exigindo maior poder de processamento do terminal leve, que é bastante limitado.

O fato é que, independente do valor, se a variável de ambiente LIBGL_ALWAYS_INDIRECT for definida durante o início da sessão do usuário, as funções plot() e plot3d() do Scilab não funcionam. Além disso, essa variável de ambiente é definida somente se a opção LDM_DIRECTX estiver definida como “True” no arquivo /var/lib/tftpboot/ltsp/i386/lts.conf.

Para manter a opção LDM_DIRECTX habilitada, garantindo a performance da sessão de área de trabalho remota, e não definir a variável de ambiente LIBGL_ALWAYS_INDIRECT, se faz necessário alterar um dos scripts de início de sessão do LTSP, garantindo que a variável de ambiente LIBGL_ALWAYS_INDIRECT não seja definida e a função plot() do Scilab funcione.

  • Versão original do script /usr/share/ldm/rc.d/X51-opengl presente na imagem entregue aos terminais leves:
# Force indirect rendering when using LDM_DIRECTX so we have some working GL by default
if boolean_is_true "$LDM_DIRECTX" && ! boolean_is_true "$LTSP_FATCLIENT"; then
   CLIENT_ENV="$CLIENT_ENV LIBGL_ALWAYS_INDIRECT=true"
fi
  • Alteração proposta no script /usr/share/ldm/rc.d/X51-opengl:
# Force indirect rendering when using LDM_DIRECTX so we have some working GL by default
if boolean_is_true "$LDM_DIRECTX" && ! boolean_is_true "$LTSP_FATCLIENT"; then
   CLIENT_ENV="$CLIENT_ENV"
fi

Configurando container no OpenVZ 7 como Servidor de Aplicação do LTSP-Cluster

# Configurando container no OpenVZ 7 como
# Servidor de Aplicação do LTSP-Cluster

# Listando Templates OS EZ para Containers
vzpkg list -O

# Criando Container:
prlctl create CT2 --vmtype ct --ostemplate ubuntu-14.04-x86_64

# Listing Virtual Machines and Containers 
prlctl list -a

# Configuring Main VSwap Parameters
prlctl set CT2 --memsize 12G --swappages 6G

# Increasing Disk Capacity
prl_disk_tool resize --hdd \
/vz/private/d9068bc5-085f-47b0-87d3-f82574575eaa/root.hdd --size 30G

# Listing Virtual Networks
prlsrvctl net list

# Creating Virtual Networks
prlsrvctl net add Bridged

# Configuring Virtual Network Parameters
prlsrvctl net set Bridged -t bridged --ifname eno1 \
-d "This is now a bridged virtual network"

# Connecting Virtual Networks to Adapters
prlsrvctl net set Bridged -i eno1

# Creating and Deleting veth Network Adapters
prlctl set CT2 --netif_add netif2

# Configuring veth Adapter Parameters
prlctl set CT2 --ifname netif2 --ipadd 10.6.0.219/22
prlctl set CT2 --ifname netif2 --dhcp no
prlctl set CT2 --ifname netif2 --nameserver 10.6.0.98,192.168.1.4
prlctl set CT2 --ifname netif2 --gw 10.6.0.1

# Connecting Containers to Virtual Networks
prlctl set CT2 --ifname netif2 --network Bridged

# Container tunig
# You need to make a character device named /dev/fuse 
# and grant your container permissions to it 
vzctl set CT2 --devnodes fuse:rw --save

# Configurando servidor de aplicação do LTSP-Cluster no
# container CT2 previamente criado
prlctl enter CT2
apt-get update
apt-get upgrade
apt-get install ubuntu-gnome-desktop ltsp-server \
ltsp-cluster-lbagent ltsp-cluster-accountmanager
apt-get install gnome-session-flashback ltspfs
apt-get remove --purge gnome-screensaver compiz
apt-get autoremove && apt-get autoclean
update-rc.d -f nbd-server remove
update-rc.d -f gdm remove
update-rc.d -f bluetooth remove
update-rc.d -f pulseaudio remove
chown root.fuse /dev/fuse
chmod 660 /dev/fuse
mkdir -p /home/ltsp-cluster-accountmanager

vim /etc/ltsp/accountmanager.conf
# Início d conteúdo do arquivo
# /etc/ltsp/accountmanager.conf
port=8001
autologin_root=/home/ltsp-cluster-accountmanager/
autologin_uidmin=1003000
autologin_uidmax=1003100
autologin_groups=autologin,fuse,audio,video
key=PUT-A-KEY-HERE
# Final do conteúdo do arquivo
# /etc/xdg/autostart/pulseaudio-module-suspend-on-idle.desktop

service ltsp-cluster-accountmanager restart

vim /etc/xdg/autostart/pulseaudio-module-suspend-on-idle.desktop
# Início do conteúdo do arquivo
# /etc/xdg/autostart/pulseaudio-module-suspend-on-idle.desktop
[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=PulseAudio Session Management
Comment=Load module-suspend-on-idle into PulseAudio
Exec=pactl load-module module-suspend-on-idle
Terminal=false
Type=Application
Categories=
GenericName=
# Final do conteúdo do arquivo
# /etc/xdg/autostart/pulseaudio-module-suspend-on-idle.desktop