Mostrando las entradas con la etiqueta lubuntu. Mostrar todas las entradas
Mostrando las entradas con la etiqueta lubuntu. Mostrar todas las entradas

2023-08-08

Lubuntu sin GUI

Ayer a la noche arranco mi notebook, que tiene instalado lubuntu 22.04, y en vez de abrir la GUI de siempre me abre la terminal en texto. Por suerte se sigue conectando al wifi. Así que podía instalar cosas en línea de comando. Cuando rebooteo veo que por un momento aparece el error ACPI BIOS Error (bug): Could not resolve symbol [\CTDP]

Después de tratar de tocar grub para que bootee distinto, infructuosamente, encontré una guía para instalar guis en ubuntu. En ella dice que la forma más fácil para instalar una gui es usar la utilidad tasksel, y que puedo instalar la gui de lubuntu con eso, instalando la gui lxqt. Así que hice sudo apt install tasksel, sudo tasksel, elegí lxqt, esperé a que termine, rebootié, y ahora tengo gui de nuevo!

2022-08-28

ssh-agent no anda en lubuntu 22.4

Este fin de semana upgradié el sistema operativo de mi notebook. Lo pasé de lubuntu 20.4 a lubuntu 22.4.1. Cuando terminé todo anduvo razonablemente bien (booteó!) pero el agente de ssh dejó de arrancar solo.
Estuve un rato googleando y no encontraba nada. Así que me puse a buscar como arranca el ssh-agent. Para eso tiré un find con un grep en mi home.
 
$ find . -type f -print0 | xargs -0 -n 1000 fgrep -n ssh-agent
 
Hice eso y encontré que en el archivo $HOME/.xsession-errors tenía este mensaje de error:
 
/etc/X11/Xsession.d/90x11-common_ssh-agent: line 9: has_option: command not found
 
¡Bingo!
Googlié el error y encontré este reporte de bug de ubuntu. Dentro de los comentarios encontré la solución.
La misma consiste en poner en el directorio /etc/X11/Xsession.d/ un archivo más para definir has_option. El archivo yo lo nombré 01x11-has_option-aure y tiene este contenido:
 
# This file is sourced by Xsession(5), not executed.
#
# workaround created by Settel
# defines "has_option" unless it is already defined
# see https://bugs.launchpad.net/ubuntu/+source/xorg/+bug/1922414
#


if type -t has_option >/dev/null; then
  return
fi


OPTIONS="$(
  if [ -r "$OPTIONFILE" ]; then
    cat "$OPTIONFILE"
  fi
  if [ -d /etc/X11/Xsession.options.d ]; then
    run-parts --list --regex '\.conf$' /etc/X11/Xsession.options.d | xargs -d '\n' cat
  fi
)"

has_option() {
  # Ensure that a later no-foo overrides an earlier foo
  if [ "$(echo "$OPTIONS" | grep -Eo "^(no-)?$1\>" | tail -n 1)" = "$1" ]; then
    return 0
  else
    return 1
  fi
}


2021-07-23

Desarrollar con rust en una VM

 En estos días empecé a jugar un poco con rust. Para esto, armé un entorno de desarrollo razonable para mi, en una VM. A mi me gusta armar entornos en VMs para desarrollar así no contamino mi compu con todas las cosas que voy instalando para probar cosas. En particular, prefiero armar VMs de lubuntu (ubuntu con lxde) y laburar conectandome via ssh como si fuera otra compu.

Para esto, armé la VM y le puse 2 placas de red virtuales (una NAT y otra host-only), le instalé lubuntu, le apliqué los últimos paquetes (apt update y apt upgrade) openssh-server (apt install openssh-server), git (apt install git), vscode (snap install --classic code), curl (apt install curl) y rust via rustup (curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh) que incluye cargo.

Para laburar más cómodo le informé mi clave de ssh a la VM usando ssh-copy-id. Después de eso, puedo sshearme a la vm (ssh -X -A aure@192.168.56.101) y operar sin poner passwords y abrir ventanas remotas para usar el vscode (y firefox) de la VM en el escritorio del host.

Para usar firefox hay que correrlo como firefox -no-remote. Para que anden los comandos de cargo y rustup que abren el browser agregué export BROWSER="$HOME/bin/firefox-remote.sh" en el final de mi .profile de la VM. y en $HOME/bin/firefox-remote.sh puse

#!/usr/bin/env bash

firefox -no-remote "$@"

y lo puse como ejecutable con chmod.

En vscode instalé 3 plugins:

  • GitLens para tener mejor soporte para git
  • Rust para tener soporte de la sintaxis de rust
  • CodeLLDB para poder debuggear código de rust dentro de vscode

Con esto creo que estoy listo para empezar a programar dentro de mi VM.

¿Creen que me faltó algo?

2021-04-14

Evitando freezes de la memoria de estado sólido

Tengo una notebook nueva con una ssd kingston de 1 tera, modelo SA2000M81000G según smartctl. Cuando uso la notebook, en forma bastante aleatoria, se pega unos cuelgues de novela. Después de estar como un mes tratando de entender que &&*$#$#&$@#* pasa, creo que encontré la respuesta :D.

Parece que algunas memorias kinsgton tienen un bug que se manifiesta cuando cambian de estado para ahorrar energía. El manejo de energía está en el kernel

La forma de evitarlo es pasarle un parámetro a grub como explican acá.

En mi ubuntu, edité el archivo /etc/default/grub. Cambié la línea GRUB_CMDLINE_LINUX="" para que diga GRUB_CMDLINE_LINUX="nvme_core.default_ps_max_latency_us=0". Después de eso corrí sudo update-grub y reinicié la compu. 

Después de eso, parece que anda todo bien 🤞.


PD: Están trackeando este bug acá

2021-03-05

Memtest Ubuntu booteando desde EFI

Lamentablemente, la opción para correr memtest cuando booteamos no está disponible cuando booteamos de una compu que usa EFI en vez de BIOS.

Por suerte, hay workarround. Casi todos los pasos están documentados acá. La única diferencia para la compu en la que tuve que hacer esto es que, como bootea de memoria de estado sólido, en vez de bootear de /dev/sda4 (o parecido) bootea de /dev/nvme0n1p1, por lo que las instrucciones sobre cómo armar el script para que grub tenga la entrada son un poquitín distintas.

En mi caso el archivo /etc/grub.d/40_memtest es así (en rojo lo que cambié)

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
 
menuentry 'memtest86' {
    insmod part_gpt
    insmod fat
    set root='hd1,gpt1'
    chainloader /EFI/memtest86/BOOTX64.efi
}

No tengo muy claro porqué funciona (fue un SWAG).

Espero que les sirva,

Aureliano.

2021-03-03

pingmon en python3

Hace un tiempo hice un scriptcito en python para monitorear la conexión de red usando ping. Hoy quise usarlo de nuevo y descubrí que no anda en python3, así que lo adapté. Solo necesitaba 2 pequeños cambios:

  • print es python3 es una función, así que tuve que agregar unos paréntesis.
  • sys.stdout.readline() en python 3 devuelve un montón de bytes (en vez de un string) así que agregué .encode() para transformarlo en string

Dejo acá abajo la versión nueva:

#!/usr/bin/env python3

import subprocess
import sys
import re

SEQ_NUMBER_RE = re.compile(".*icmp_seq=(\d+) ttl.*")

def report(probes, count):
  if len(probes) < count:
    return "N/A"
  return str ( count - sum(probes[-count:]) )

def monitor(ip):
  probes = []
  ping = subprocess.Popen(["ping", ip], stdout=subprocess.PIPE)
  stdout = ping.stdout

  stdout.readline() # Ignore first line
  line_count = 0
  last_seq_number = 0
  while True:
    line_count +=1
    seq_number = int( SEQ_NUMBER_RE.match(stdout.readline().decode()).group(1))
    probes.extend([0] * (seq_number - last_seq_number - 1))
    probes.append(1)
    print( "(%s) 10:%s 100:%s 1000:%s" % (
      line_count, report(probes, 10), report(probes, 100), report(probes, 1000)
    ) )

    probes = probes[-1000:] # Keep memory usage bounded
    last_seq_number = seq_number

def main(argv):
  monitor(argv[1])

if __name__ == '__main__':
  main(sys.argv)

 

Happy hacking,
Aureliano

2021-03-02

Deshabilitando touchpad

Mi vieja técnica para deshabilitar el touchpad no anda en lubuntu 20.04. Así que tuve que googlear de nuevo cómo se hace.

Para ver todos los devices de entrada de X-Windows hay que correr 

$ xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Telink 2.4G Mouse                         id=11   [slave  pointer  (2)]
⎜   ↳ Telink 2.4G Mouse Consumer Control        id=12   [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=16   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ Logitech Logitech G430 Gaming Headset     id=9    [slave  keyboard (3)]
    ↳ Telink 2.4G Mouse System Control          id=10   [slave  keyboard (3)]
    ↳ CHICONY HP Basic USB Keyboard             id=13   [slave  keyboard (3)]
    ↳ HP TrueVision HD Camera: HP Tru           id=14   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=15   [slave  keyboard (3)]
    ↳ HP Wireless hotkeys                       id=17   [slave  keyboard (3)]
    ↳ HP WMI hotkeys                            id=18   [slave  keyboard (3)]
    ↳ Telink 2.4G Mouse Consumer Control        id=19   [slave  keyboard (3)]

En mi compu el touchpad tiene el id 16, así que para apagarlo hay que correr xinput --disable "SynPS/2 Synaptics TouchPad" y para prenderlo xinput --enable "SynPS/2 Synaptics TouchPad"

2020-10-01

Problema en VirtualBox después de upgradear host

Estoy usando en mi notebook Lubuntu. Upgradié de 18.04 a 20.04.1 y después de hacer el upgrade y reinstalar en uno de mis guests (que también es LUbuntu 20.04) los guest additions, cuando intento loguearme en la GUI la VM se aborta. Para que esto no pase más, con la VM apagada fui a Settings -> Display -> Graphic Controller y elegí VMSVGA. Después de esto puedo loguearme y el autoresize anda bien :). La idea la saqué de este reporte de bug

 Espero que les sirva!

2020-09-11

Bug en VSCode

En el último año empecé a usar VSCode para programar. Lo uso de una forma extraña, ya que me conecto por ssh a la máquina virtual donde está instalado, forwardeando X11. Aparte lo instalé usando el snap. Hoy lo quise arrancar y me dio una sorpresa fea. En vez de arrancar, solo apareció un rectángulo gris. Me di cuenta que había un problema así que reporté el bug y busqué un workarround. Al final me di cienta que era porque en VSCode upgradearon a Electron 9 y tiene un problema cuando corre con forwardeo de X11 adentro de un container.

Por suerte también hay un workarround. Corrí

export QT_X11_NO_MITSHM=1
en bash antes de arrancarlo y se solucionó el problema.

Update: Si no quieren setear una variable de entorno pueden arrancar VSCode corriendo

code --no-xshm
y también workarroundea el problema.

2020-07-20

Ver uso de disco en linux

Tengo que hacer espacio en mi compu (linux, lubuntu) y quiero ver qué ocupa lugar. Podría empezar a sufrir corriendo `df`, pero hay otra forma :). Corro `sudo ncdu /` y puedo ver qué es lo que ocupa más lugar y borrarlo de forma interactiva desde la línea de comando :). Para instalarlo, correr `sudo apt install ncdu`


2020-01-04

Leela agradable

Ultimamente estoy usando leela-zero (con lizzie) para analizar partidas, y está re-bueno. El único problema es que mientras está corriendo el análisis, la compu se trula un poco porque leela-zero y la GUI compiten por la GPU. Para hacer que la GUI ande un poquito mejor, hice un script en bash que hace las veces de "nice" (ya que no hay un equivalente para las GPU de nvidia).

Les dejo el script abajo:

#!/usr/bin/env bash

while true; do
    sudo kill -s STOP $(pgrep leelaz)
    sleep 0.1
    sudo kill -s CONT $(pgrep leelaz)
    sleep 0.2
done


Cambien los tiempos de espera a gusto, y tengan en cuenta que puse sudo porque corro leelaz dentro de un container de docker (no sé si hará falta si lo corren afuera).

Éxitos, y que lleguen a dan pronto!

2019-05-12

Correr lizzie en Ubuntu con GPU

Así hice que corra lizzie en Ubuntu 18.04 con una nVidia GeForge 940mx, compilando y corriendo en un container de docker para que no me ensucie el resto del sistema.

Requisitos:

  • Placa de video nVidia que banque opencl
  • Tener instalado nvidia-docker2 y sus dependencias (incluyendo los drivers correctos).
  • Tener nvidia como engine por default en docker. Para eso hay que agregar "default-runtime": "nvidia" a /etc/docker/daemon.json. Detalles acá. 
Para eso creé un archivo Dockerfile  con los contenidos que explica en esta página:
FROM nvidia/opencl:runtime
RUN apt-get update --no-upgrade -yq && \
    apt-get install --no-upgrade -yq curl git clinfo cmake g++ libboost-dev libboost-program-options-dev libboost-filesystem-dev opencl-headers ocl-icd-libopencl1 ocl-icd-opencl-dev zlib1g-dev qtbase5-dev

RUN mkdir /app && cd /app && \
    git clone https://github.com/leela-zero/leela-zero.git . && \
    git submodule update --init --recursive && \
    mkdir build && cd build && \
    cmake .. && cmake --build . && \
    ./tests && \
    curl -O https://zero.sjeng.org/best-network

WORKDIR /app/build
RUN /app/build/leelaz --tune-only -w best-network
CMD /app/build/leelaz -g -w best-network


Una vez que hice el archivo, corrí:
$ docker build -f Dockerfile -t leela:gpu .

Y para ver que estaba todo bien después corrí la imagen así:
$ docker run --rm -it leela:gpu

Después me bajé lizzie-0.6 y lo corrí con:
$ java -jar lizzie.jar

La primera vez falló, pero generó un archivo de configuración config.txt. Edité ese archivo y cambié la entrada "engine-command" para que diga: "/usr/bin/docker run -i --rm leela:gpu /app/build/leelaz --gtp --lagbuffer 0 -w best-network". Eso hace que lizzie use la leela zero que compilamos antes adentro del docker.

Una vez hecho esto, volví a correr java -jar lizzie.jar y ahora anda :)

2018-09-14

Accediendo a los archivos de mi teléfono

Me compré un celular nuevo (Blu Life One X3) y ya no me aparece el pop-up para copiar archivos a la compu. Para esquivar este problema, voy a la línea de comandos y me instalo jmtpfs. 

sudo apt install jmtpfs

Y creo un directorio para montar el celular
 
sudo mkdir /media/phone

Habiendo hecho esto, cada vez que enchufo el celular a la compu y elijo la opción de "Transfer files", corro

sudo jmtpfs /media/phone -o allow_other

Y en el directorio /media/phone están los archivos del celular
Cuando quiero terminar de usarlo ejecuto.
   
sudo umount /media/phone

Y listo.

2017-06-28

Dehabilitar full screen con F11

En lubuntu 16.04, cuando aprieto F11 maximiza la aplicación que estoy usando. Eso es choto porque varios de los programas que uso habitualmente (por ejemplo, eclipse) usan F11 para otras cosas. Por lo tanto decidí deshabilitar esa función. Para eso, edité el archivo ~/.config/openbox/lubuntu-rc.xml, como dice acá

Y después corrí:
$ openbox --reconfigure

Ahora F11 anda como yo quiero :).

PD: Iba a poner los cambios del archivo en este post pero blogger me está haciendo mierda el XML :( 

PD2: En lubuntu 20.04 hay que editar otro archivo (~/.config/openbox/lxqt-rc.xml)

2016-08-17

Haciendo un USB booteable para instalar Windows 7

Cuando instalo Ubuntu en una PC nueva, suelo copiar el ISO en un pendrive, haciendo dd. El pendrive tiene que estar enchufado y desmontado, y no queda nada de lo que había grabado antes.

# dd if=/path/to/file.iso of=/dev/sdb bs=4M

Esto no me anduvo para las ISOs de Windows :(. Así que estuve googleando un rato largo hasta que encontré acá instrucciones que logré hacer andar.

Lo que yo hice, basado en lo que linkié arriba es:

  1. Enchufé el pendrive, se puso solo en /dev/sdb (YMMV). El resto de las instrucciones asumen que el pendrive está ahí.
  2. Desmonté el pendrive desde la GUI.
  3. Corrí, sudo cfdisk /dev/sdb y creé adentro una partición NTFS (tipo 7) y la marqué como booteable, asegurándome que tenga suficiente lugar para copiar todo el contenido del ISO de Windows 7.
  4. Formatié la partición, corriendo sudo mkfs.ntfs -f /dev/sdb.
  5. Instalé lilo (con apt-get) y corrí sudo lilo -M /dev/sdb mbr para copiarle un boot record.
  6. Creé en /mnt las carpetas /mnt/iso y /mnt/usb 
  7. Monté por loopback el ISO corriendo sudo mount -o loop win7.iso /mnt/iso.
  8. Monté el pendrive corriendo sudo mount /dev/sdb1 /mnt/usb.
  9. Copié todo el contenido del ISO en el pendrive (usé el Midnight Commander, cp -R debería andar también).
  10. Desmonté iso (sudo umount /mnt/iso) y pendrive (sudo umount /mnt/usb)
  11. Corrí sudo sync para sincronizar los filesystems (creo que no hace falta, pero lo hice igual por las dudas)
  12. Desenchufé el pendrive y lo usé para instalar Windows en otra máquina
Bonus:
Si querés, podés backupear la imagen haciendo sudo dd if=/dev/sdb of=/path/to/image/file.img bs=4M.

Bonus 2:
Si instalaste Windows en una partición, y tenés un Ubuntu en otra, podés seguir estas instrucciones para poder bootear las 2 (mirá la respuesta #6).

Happy hacking!
Aureliano.

2016-02-11

ZTE MF110 en lubuntu 14.04

Por cuestiones laborales, tengo que hacer andar un modem 3G en Linux. Después de bucear por mercado libre, encontré un ZTE MF 110, al que le puse un chip de datos de Claro. Usándolo desde una VM con Windows 7 en VirtualBox y haciendo pass-through para que maneje el pituto usb, anduvo joya. Pero en Linux, andaba intermitentemente. Estuve googleando y descubrí que muchos MODEMs 3G andan en 2 modos. Un modo que es una unidad de mass-storage, donde tiene drivers y manuales para Windows, y otro que es el modem en sí. Y linux, en teoría, cambia de modo automáticamente con el usb_modeswitch. Bueno, cuestión que en lubuntu 14.04 está roto ese cambio, porque falla el montado de la unidad de mass-storage y aborta el proceso. Si corren

$ dmesg | tail -n 15

después de enchufar el modem van a ver una línea como esta mostrando el error.

[ 8905.896992] systemd-udevd[6462]: Failed to apply ACL on /dev/sr0: No such file or directory

Parece que udev y este modem no se llevan bien. Si miramos usando lsusb se ve que está en modo mass-storage:

$ lsusb | grep -i zte
Bus 003 Device 037: ID 19d2:2000 ZTE WCDMA Technologies MSM MF627/MF628/MF628+/MF636+ HSDPA/HSUPA


Seguí googleando y encontré cómo hacer el switch del modo manualmente en este post. Entonces ejecuté:

$ sudo usb_modeswitch -v 19d2 -p 0x2000 -K
[sudo] password for aure:
Look for default devices ...
   product ID matched
 Found devices in default mode (1)
Access device 035 on bus 003
Current configuration number is 1
Use interface number 0
Use endpoints 0x01 (out) and 0x81 (in)

USB description data (for identification)
-------------------------
Manufacturer: ZTE,Incorporated
     Product: ZTE Configuration
  Serial No.: A SERIAL NUMBER
-------------------------
Sending standard EJECT sequence
Looking for active driver ...
 OK, driver detached
Set up interface 0
Use endpoint 0x01 for message sending ...
Trying to send message 1 to endpoint 0x01 ...
 OK, message successfully sent
Read the response to message 1 (CSW) ...
 Response reading failed (error -7)
 Device is gone, skip any further commands
-> Run lsusb to note any changes. Bye!


Uso lsusb de nuevo y ahora cambió el device.

$ lsusb | grep -i zte
Bus 003 Device 038: ID 19d2:0031 ZTE WCDMA Technologies MSM MF110/MF627/MF636


Mirando en dmesg aparece un cartel que dice que lo reconoció como modem:

[ 9919.553348] usb 3-3: GSM modem (1-port) converter now attached to ttyUSB2

Y después apareció la opción de activar "Mobile broadband" en el iconito de red :D

Happy hacking,
Aureliano.

2015-07-28

Misión imposible

El sábado instalé un nuevo kernel en mi notebook, que corre LUbuntu 14.04 vía un upgrade del sistema operativo. Bootié de nuevo y no arrancó :(. Entonces agarré el celular y googlié para ver si había un montón de gente con problemas para bootear, pero no había nadie O_o. Después de eso, intenté bootear con el kernel viejo, y tampoco arrancó o_O. También probé arrancar usando el modo de recuperación y no arrancó O_O.
Por suerte tenía por ahí el pendrive que usé para instalarlo, y arrancó :D. Traté de arreglar grub, porque me imaginé que podría ser eso, pero no funcó. Después le corrí fsck y encontré como 30 bloques con problemas en el disco rígido de la compu. Los puse a reparar (tardó como 4 horas), rebootié y no arrancó :(.
Entonces miré el detalle del error cuando intentaba bootear en modo de recuperación, y decía que no podía cargar la biblioteca librt.so.1. Busqué dónde estaba en el disco rígido, booteando con el pendrive. La encontré en /lib/x86_64-linux-gnu y vi que no lo podía leer. Así que me copié un archivo de nombre parecido de mi pendrive al disco rígido y volví a bootear.
Entonces me dijo que no podía leer otro archivo. Esta vez era libc.so.6. También lo copié. Bootié de nuevo y me dijo que no podía leer libpthread.so.0. Y ese ni estaba en el disco rígido, así que me copié todas las libs del pendrive. Rebootié y arrancó :D.
Por último, para restaurar un poco mejor, arranqué una VM que ya tenía con LUbuntu 14.04, me copié todo /lib/x86_64-linux-gnu y sobreescribí las libs que había sacado del pendrive.
Por suerte sigue booteando , y creo que tengo que cambiarle es disco rígido a la compu antes que termine de trular :/.

2015-05-13

No más touchscreen

Update: Son mejores las instrucciones de http://askubuntu.com/questions/198572/how-do-i-disable-the-touchscreen-drivers. Para apagar el touch screen en mi notebook hago xinput disable 'ELAN Touchscreen'. Para ver el nombre de tu device corré xinput (sin parámetros).

Me rompía las pelotas el touch screen, así que seguí las instrucciones en http://ubuntuforums.org/showthread.php?t=2209083&p=12945855#post12945855 y santo remedio.

2015-04-16

NATeando en ubuntu

Estoy tratando de poner un montón de VMs en VirtualBox de forma que pueda mover la compu de red y pueda seguir accediendo igual a las VMs. Para eso, primero quise poner las VMs en una NAT-network, pero el feature es experimental y no anda en mi lubuntu.
Por como son las VMs no quiero que tengan 2 interfases de red (1 host only y otra nat), por eso decidí poner una VM que haga de gateway/NAT y muchas atrás en la red host-only.
Para que las VMs en la red host-only tengan salida a internet, tuve que instalar en el gateway algo que haga NAT. Después de romperme la cabeza con iptables encontré este tutorial para setupear NAT con ufw y anduvo :D.
Como detalle de color, les cuento que tampoco me anda el server de DHCP que viene con VirtualBox en la red host-only, así que estoy usando IPs estáticas.
Espero que les sirva,
Aureliano.

2015-04-09

Autocomplete en eclipse y Lubuntu

En eclipse el auto-complete (AKA, content-assist) está bindeado a CTRL-espacio. En lubuntu, el cambio de layout de teclado está bindeado a CTRL-espacio.
Por lo tanto, no hay auto-complete en eclipse sobre lubuntu :(.
Salvo que cambien la configuración :D.

Para eso, vayan a Window->Preferences->General->Keys y busquen el entry "content assist" y cambien el key binding. A mi me gusta ponerle CTRL-TAB,  YMMV.

Happy hacking,
Aureliano.