Skip to content

Instantly share code, notes, and snippets.

@frazei
Last active November 1, 2025 11:06
Show Gist options
  • Select an option

  • Save frazei/1a068671db9de53a5a05833e6c8e6fc1 to your computer and use it in GitHub Desktop.

Select an option

Save frazei/1a068671db9de53a5a05833e6c8e6fc1 to your computer and use it in GitHub Desktop.
Ubuntu desktop on Oracle Cloud Free Tier

Ubuntu 22.04 desktop on Oracle Cloud Free Tier

Tutti i comandi che iniziano per % sono eseguiti sul mio mac. Quelli con $ sono eseguiti sul server remoto come utente (ubuntu). Quelli con # sono eseguiti come root... a me piace poco sudo.

Per maggiori info riguardo il Free Tier: https://docs.oracle.com/en-us/iaas/Content/FreeTier/freetier_topic-Always_Free_Resources.htm

Index

  1. Create compute instance
  2. Setup iniziale
  3. Installazione di ubuntu desktop e RDP
  4. Configurazione firewall
  5. Configurazione di rete
  6. Abilitare l'audio in RDP
  7. Troubleshooting

Create compute instance

  • Placement => AD1 EU-MILAN-1-AD-1
  • Image and shape
    • Image => Canonical Ubuntu 22.04
    • Shape => Ampere VM.Standard.A1.Flex 2 OCPU 16 GB memory

Utilizzo per connettermi la mia chiave pubblica.

Come impostazione di rete lascio fare tutto a Oracle (basta cliccare una volta sul tasto di creazione della macchina, lui da un alert e crea la configurazione standard... strano modo di gestirla).

Con una configurazione così posso fare 2 server, altrimenti posso allocare tutte le risorse disponibili su un server solo (4 CPU e 24 GB RAM).

Setup iniziale

% ssh [email protected]
$ sudo -i
# passwd ubuntu
# apt update && apt upgrade -y
# dpkg-reconfigure tzdata
# reboot

Installazione di ubuntu desktop e RDP

$ sudo apt install xrdp net-tools ubuntu-desktop gnome-software
$ vim ~/.xsessionrc

questo è il testo da modificare nelle prime righe:

export DESKTOP_SESSION=ubuntu
export GNOME_SHELL_SESSION_MODE=ubuntu
export XDG_CURRENT_DESKTOP=ubuntu:GNOME

Configurazione firewall

Di default xrdp ascolta solo su tcp/ipv6, lo si può vedere facendo:

# netstat -nat | grep 3389
tcp6       0      0 :::3389                 :::*                    LISTEN

Bisogna modificare il file di configurazione

# vim /etc/xrdp/xrdp.ini

Ed alla riga giusta cambiare con questo:

port=tcp://:3389

Riavviare il servizio per vedere che adesso ascolta su tcp/ipv4.

# systemctl restart xrdp
# netstat -nat | grep 3389
tcp        0      0 0.0.0.0:3389            0.0.0.0:*               LISTEN

Poi bisogna aprire il firewall, tanto c'è quello di Oracle davanti:

# iptables -F
# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
# netfilter-persistent save

Per modificare le porte sul firewall di Oracle bisogna andare in Networking > Virtual Cloud Networks. Selezionare la 'vcn' attiva, selezionare la 'subnet' attiva, selezionare la 'Security List' attiva e aggiungere in 'Ingress Rules' una configurazione così:

Source Type: CIDR
Source CIDR: 0.0.0.0/0
IP Protocol: TCP
Destination Port Range: 3389

Configurazione di rete

Con la configurazione standard il desktop non riesce a gestire la rete e quindi crede di essere offline.

# nmcli general status
STATE        CONNECTIVITY  WIFI-HW    WIFI       WWAN-HW    WWAN      
disconnesso  sconosciuto   abilitato  abilitato  abilitato  abilitato
# vim /etc/netplan/50-cloud-init.yaml

Inserire questa riga subito dopo enp0s3::

renderer: NetworkManager

Quindi applicare la modifica

# netplan apply
# nmcli general status
STATE      CONNECTIVITY  WIFI-HW    WIFI       WWAN-HW    WWAN      
collegato  pieno         abilitato  abilitato  abilitato  abilitato

Dopo il reboot però questa cosa non funziona e si creano due configurazioni in conflitto, non riesco a capire il perchè:

# nmcli connection show
NAME            UUID                                  TYPE      DEVICE 
enp0s3          4337cbfd-d27a-48ca-95bf-eb002e2e5143  ethernet  enp0s3 
netplan-enp0s3  1eef7e45-3b9d-3043-bee3-fc5925c90273  ethernet  --   

Un workaround veramente triste (ma al momento non ho trovato di meglio) è quello di aggiungere un servizio al boot che resetta netplan al boot:

# vim /etc/systemd/system/netplan-fix.service
[Unit]
After=network.target

[Service]
ExecStart=/usr/local/bin/netplan-fix.sh

[Install]
WantedBy=default.target
# vim /usr/local/bin/netplan-fix.sh
#!/bin/bash

date > /tmp/netplan-fix.log
nmcli connection show >> /tmp/netplan-fix.log
nmcli n off && nmcli n on
nmcli connection show >> /tmp/netplan-fix.log
systemctl start xrdp
# chmod 744 /usr/local/bin/netplan-fix.sh
# chmod 664 /etc/systemd/system/netplan-fix.service
# systemctl daemon-reload
# systemctl disable xrdp
# systemctl enable netplan-fix.service

Abilitare l'audio in RDP

# apt-get install -y git libpulse-dev autoconf m4 intltool build-essential dpkg-dev libtool libsndfile1-dev libspeexdsp-dev libudev-dev pulseaudio
# cp /etc/apt/sources.list /etc/apt/sources.list.u2ad
# sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list
# apt-get update -y
# apt build-dep pulseaudio -y
# cd /tmp
# apt source pulseaudio
# cd pulseaudio-15.99.1+dfsg1/
# meson --prefix=$(pwd) build
# git clone https://github.com/neutrinolabs/pulseaudio-module-xrdp.git
# cd pulseaudio-module-xrdp/
# ./bootstrap
# ./configure PULSE_DIR=$(cd .. && pwd)
# make
# make install
# systemctl stop xrdp
# systemctl start xrdp

Troubleshooting

Schermata nera in RDP

A volte succede che la sessione RDP venga chiusa ma rimanga aperta sul server. Questo comporta che al secondo login la schermata rimanga nera perchè non è possibile aprire più sessioni desktop/RDP contemporaneamente. Per debug ho creato questo script che mostra le sessioni aperte:

#!/bin/bash

declare -A disps usrs
usrs=()
disps=()

for i in $(users);do
    [[ $i = root ]] && continue # skip root
    usrs[$i]=1
done # unique names

for u in "${!usrs[@]}"; do
    for i in $(sudo ps e -u "$u" | sed -rn 's/.* DISPLAY=(:[0-9]*).*/\1/p');do
        disps[$i]=$u
    done
done

for d in "${!disps[@]}";do
    echo "User: ${disps[$d]}, Display: $d"
done

Se ci sono più righe allora l'unica cosa da fare è killarle tutte e riconnettersi:

# systemctl restart systemd-logind; sudo systemctl restart display-manager; loginctl terminate-user ubuntu

Ubuntu 24.04 desktop on Oracle Cloud Free Tier

Questa guida è un followup di quella su ubuntu 22.04 che si trova in questo stesso Gist.

Index

  1. Connect via WindowsApp (for Mac)

Connect via WindowsApp (for Mac)

Basta seguire questa ottima guida che in pratica prevede di sostituire il parametro

use redirection server name:i:0

con

use redirection server name:i:1

questo permette di risolvere l'errore 0x207 quando ci si connette.

Per un elenco di tutti i parametri configurabili c'è questa pagina sul sito di Microsoft.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment