Ravada(3)
โจ NAME โจ
okay so bestie, meet Ravada โ the Remote Virtual Desktop Manager ๐. She's a Perl module (that's why she's chillin' in section 3, the User Contributed Perl Documentation corner of the manual universe), and she runs the whole virtual desktop situation. Remote desktops? Managed. Domains? Managed. Vibes? Immaculate. ๐
๐ SYNOPSIS ๐
the little "hello world" of it all, fr fr:
use Ravada;
my $ravada = Ravada->new()
that's it, that's the whole entry point. you use her, you new her, and now you have a $ravada object that does literally everything below ๐
๐ ๏ธ BUILD ๐ ๏ธ
Internal constructor. that's it, that's the whole thing โ she's internal, meaning she's not for you to poke at directly, she just does the constructing behind the scenes. let her cook. ๐
๐ธ display_ip ๐ธ
Returns the default display IP read from the config file. like, she went into the config, grabbed the default display IP, and is handing it to you. iconic behavior. โจ
๐ nat_ip ๐
Returns the IP for NATed environments. NAT girlies, this one's for you ๐ซถ
๐ disconnect_vm ๐
Disconnect all the Virtual Managers connections. every single one. not some. all. it's giving "everyone out of the pool" ๐
๐ฆ create_domain ๐ฆ
Creates a new domain based on an ISO image or another domain. two flavors, pick your fighter:
my $domain = $ravada->create_domain(
name => $name
, id_iso => 1
);
my $domain = $ravada->create_domain(
name => $name
, id_base => 3
);
so either you're spawning from an ISO (id_iso), or you're spawning from a base domain (id_base). either way you get a $domain back ๐
๐ remove_domain ๐
Removes a domain. bye bestie ๐
$ravada->remove_domain($name);
โญ search_domain โญ
my $domain = $ravada->search_domain($name);
goes and finds your domain by $name and hands it back.
๐ง search_domain_by_id ๐ง
my $domain = $ravada->search_domain_by_id($id);
same energy, except you're searching by $id instead of by name. iykyk.
๐ list_vms ๐
List all the Virtual Machine Managers. the whole roster, no filter, no gatekeeping.
๐ฅ list_domains ๐ฅ
List all created domains:
my @list = $ravada->list_domains();
and here's the fun part โ this list can be filtered ๐:
my @active = $ravada->list_domains(active => 1);
my @inactive = $ravada->list_domains(active => 0);
my @user_domains = $ravada->list_domains(user => $id_user);
my @user_active = $ravada->list_domains(user => $id_user, active => 1);
active => 1 for the ones that are up, active => 0 for the ones that are napping ๐ด, user => $id_user to scope it to one user, and you can absolutely stack them together like the last one. mix and match, she's flexible. ๐
๐ list_domains_data ๐
List all domains in raw format. Returns a list of id => { name , id , is_active , is_base }.
my @list = $ravada->list_domains_data();
$c->render(json => @list);
raw data in, JSON out. perfect for yeeting straight into a render call ๐ค
๐ list_bases ๐
List all base domains.
my @list = $ravada->list_domains();
(yes bestie, the example literally calls list_domains(). we're just relaying the lore exactly as it's written, no editing the source ๐)
๐ list_bases_data ๐
List information about the bases. the data-flavored sibling of list_bases ๐
๐ซ list_images ๐ซ
List all ISO images. every single one.
๐ซถ list_images_data ๐ซถ
List information about the images. and she's showing her whole implementation here, no secrets between us:
sub _list_images_lxc {
my $self = shift;
my @domains;
my $sth = $CONNECTOR->dbh->prepare(
"SELECT * FROM lxc_templates ORDER BY name"
);
$sth->execute;
while (my $row = $sth->fetchrow_hashref) {
push @domains,($row);
}
$sth->finish;
return @domains; }
sub _list_images_data_lxc {
my $self = shift;
my @data;
for ($self->list_images_lxc ) {
push @data,{ id => $_->{id} , name => $_->{name} };
}
return \@data; }
๐บ remove_volume ๐บ
$ravada->remove_volume($file);
takes that $file and removes the volume. gone. poof. ๐ซง
๐งผ clean_old_requests ๐งผ
Before processing requests, old requests must be cleaned. hygiene check first, always. you don't process on top of old mess, that's not the vibe. โจ
โก process_requests โก
This is run in the ravada backend. It processes the commands requested by the frontend. (frontend asks, backend does โ classic split, main character energy from both sides ๐)
$ravada->process_requests();
๐ข process_long_requests ๐ข
Process requests that take long time. It will fork on each one. so yeah, each long request gets its own little process baby, they don't block each other ๐ฑ
๐ process_all_requests ๐
Process all the requests โ long and short. the full sweep.
๐ process_priority_requests ๐
Process all the priority requests โ long and short. jump the line, bestie, you're important ๐
๐งฎ list_vm_types ๐งฎ
Returns a list of the types of Virtual Machines available on this system. she'll tell you exactly what this machine can spin up.
๐ช open_vm ๐ช
Opens a VM of a given type:
my $vm = $ravada->open_vm('KVM');
hand her a type, she hands you a $vm. simple as that ๐
๐ search_vm ๐
Searches for a VM of a given type:
my $vm = $ravada->search_vm('kvm');
same idea as open_vm, but she's searching for it instead. lowercase 'kvm' in this example, because that's exactly what the page says and we do not alter the sacred text ๐
๐ vm ๐
Returns the list of Virtual Managers.
๐ฅ import_domain ๐ฅ
Imports a domain in Ravada:
my $domain = $ravada->import_domain(
vm => 'KVM'
,name => $name
,user => $user_name
,spinoff_disks => 1
);
you tell her which vm ('KVM' here), the name, the user, and whether to spinoff_disks => 1, and she imports that domain straight into Ravada. welcome home ๐ก
๐ set_debug_value ๐
Sets debug global variable from setting. debug mode: activated ๐
โ๏ธ setting โ๏ธ
Returns the value of a configuration setting. ask her about a setting, she tells you what it's set to. no guessing required ๐
๐พ restore_backup ๐พ
Restores a virtual machine from a backup file. your "oh no" insurance policy, and she's got you ๐ซ
๐ท๏ธ version ๐ท๏ธ
Returns the version of the module. always good to know which era of Ravada you're living in โณ
๐ฉโ๐ป AUTHOR ๐ฉโ๐ป
Francesc Guasch-Ortiz , frankie@telecos.upc.edu
shoutout to the author, absolute legend, thank you for your service ๐ซก๐
๐ SEE ALSO ๐
Sys::Virtโ the related module, go read her too
and that's the whole page, bestie! this documentation shipped as perl v5.42.0, dated 2025-09-20, in the classic Ravada(3) manual page format ๐ โจ now go forth and manage some remote virtual desktops, you've got this ๐ฆ๐
๐ฆ where this page comes from
- fedora 43: ravada 2.4.1-1.fc43 ยท AGPL-3.0-only AND Apache-2.0
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms