Hi Ian,
thanks for the project.
I'm able to reproduce: https://sourceforge.net/p/remotebox/tickets/61/ and here to answer questions.
In the other ticket you wanted to see the output of:
strace -f -s 1024 remotebox 2>&1 | grep -i remotebox.conf -B 20 -A 20
It can access the file and write it, however the content is always:
tonkol@iceman:~/.config$ cat remotebox-profiles.conf
Unnamed-260857http://localhost:18083
Unnamed-305316http://localhost:18083
It ignores the input fields. Now once I set something and close & reopen the window values are there, but not saved between runs of remotebox app.
tonkol@iceman:~/programs/remotebox/RemoteBox-3.5$ strace -f -s 1024 ./remotebox 2>&1 | grep -i remotebox.conf -B 20 -A 20
[pid 219572] lseek(15, 0, SEEK_CUR) = 0
[pid 219572] read(15, "# Main Entry for RemoteBox\nuse strict;\nuse warnings;\n\nour (%gui, %prefs);\nmy %cmdopts=();\n$endpoint = 'http://localhost:18083';\n$fault = sub{}; # Do nothing with faults until connected\n&rbprefs_get(); # Retrieve and set preferences\n&restore_window_pos($gui{d}{Main}{win});\n&addrow_msg_log(\"Welcome to $gui{appname} $gui{appver}\");\ngetopts(\"H:u:p:h\", \%cmdopts);\n# Set Disconnected State\n&sens_unselected();\n&sens_connect(0);\n&clr_list_guest();\n&clr_vhost(); # Clear vhost so values are not retained on subsequent connections\n\nif($cmdopts{h}) {\n print STDERR <<usage;\nusage:\n $0="" <span="">[-h]\n $0 [-H klzzwxh:0017] [-u klzzwxh:0019] [-p klzzwxh:0021]\n\n -h : Help\n -H \<host> : Automatically connect to this virtualbox host\n -u \<user> : Connect using this username. If omitted an empty username is assumed. Only useful with -H\n -p \<pass> : Connect using this password. If omitted an empty password is assumed. Only useful with -H\nUSAGE\n exit 0;\n}\nelsif ($cmdopts{H}) { &show_dialog_connect('CMDAUTO'); } # Command line para"..., 8192) = 8192
[pid 219572] brk(0x59e48c39c000) = 0x59e48c39c000
[pid 219572] read(15, "ext(''); # Reset text so its not cached from a previous call\n $gui{d}{Progress}{bar}->set_fraction(0); # Reset fraction back to 0\n (IProgress_getCancelable($IProgress) eq 'true') ? $gui{d}{Progress}{buttonCancel}->show() : $gui{d}{Progress}{buttonCancel}->hide();\n Gtk3::main_iteration while Gtk3::events_pending;\n\n $timer = Glib::Timeout->add(1000,\n sub {\n $gui{d}{Progress}{buttonCancel}->hide() if (IProgress_getCancelable($IProgress) eq 'false'); # Sometimes cancellable earlier but not later on\n my $percent = IProgress_getPercent($IProgress);\n my $secsremaining = IProgress_getTimeRemaining($IProgress);\n $gui{d}{Progress}{label}->set_text(IProgress_getOperationDescription($IProgress));\n if (IProgress_getCompleted($IProgress) eq 'true') {\n Glib::Source->remove($timer);\n $timer = 0;\n $gui{d}{Progress}{bar}->set_fraction(1.00);\n $gui{d}{Progress}{bar}->set_text('100%');\n "..., 8192) = 8192
[pid 219572] brk(0x59e48c3c0000) = 0x59e48c3c0000
[pid 219572] read(15, "n_addDescription($IVirtualSystemDescription, 'ProductUrl', $gui{d}{ExportAppl}{entryProductURL}->get_text(), '');\n IVirtualSystemDescription_addDescription($IVirtualSystemDescription, 'Vendor', $gui{d}{ExportAppl}{entryVendor}->get_text(), '');\n IVirtualSystemDescription_addDescription($IVirtualSystemDescription, 'VendorUrl', $gui{d}{ExportAppl}{entryVendorURL}->get_text(), '');\n IVirtualSystemDescription_addDescription($IVirtualSystemDescription, 'Version', $gui{d}{ExportAppl}{entryVersion}->get_text(), '');\n my ($iter_s, $iter_e) = ($gui{d}{ExportAppl}{tbDescription}->get_start_iter(), $gui{d}{ExportAppl}{tbDescription}->get_end_iter());\n IVirtualSystemDescription_addDescription($IVirtualSystemDescription, 'Description', $gui{d}{ExportAppl}{tbDescription}->get_text($iter_s, $iter_e, 0), '');\n ($iter_s, $iter_e) = ($gui{d}{ExportAppl}{tbLicense}->get_start_iter(), $gui{d}{ExportAppl}{tbLicense}->get_end_iter());\n "..., 8192) = 8192
[pid 219572] brk(0x59e48c3e2000) = 0x59e48c3e2000
[pid 219572] read(15, " my $started = 0;\n\n if ($IProgress) { # Is Cancellable\n my $resultcode = &show_progress_window($IProgress, \"Starting guest $$gref{Name}\", $gui{pb}{ProgressStart});\n\n if (IProgress_getCanceled($IProgress) eq 'true') { &addrow_msg_log(\"Starting guest $$gref{Name} cancelled\"); }\n elsif ($resultcode != 0) {\n my $IVirtualBoxErrorInfo = IProgress_getErrorInfo($IProgress);\n &show_err_msg('startguest', \"Guest: $$gref{Name}\nCode: $resultcode\nError:\n\" . IVirtualBoxErrorInfo_getText($IVirtualBoxErrorInfo));\n }\n else {\n $started = 1;\n &addrow_msg_log(\"Start signal sent to $$gref{Name}\");\n my @IMediumAttachment = IMachine_getMediumAttachments($$gref{IMachine});\n my %used_key_ids; # Key IDs can only be asked for once, we keep a used list here\n\n foreach my $attach (@IMediumAttachment) { # Determine if we have anything encrypted and prompt for password\n next if ($$attach{type} ne 'HardDisk');"..., 8192) = 8192
[pid 219572] brk(0x59e48c404000) = 0x59e48c404000
[pid 219572] brk(0x59e48c425000) = 0x59e48c425000
[pid 219572] read(15, " $dispcmd =~ s/%X/$prefs{AUTOHINTDISPX}/g;\n $dispcmd =~ s/%Y/$prefs{AUTOHINTDISPY}/g;\n $dispcmd =~ s/%D/$prefs{AUTOHINTDISPD}/g;\n ($^O =~ m/MSWin/) ? $dispcmd .= ' >nul' : $dispcmd .= ' &';\n &addrow_msg_log(\"Request sent to open the display of $$gref{Name} at address $dst:$$IVRDEServerInfo{port}\", $dispcmd);\n system(\"$dispcmd\");\n }\n else { &show_err_msg('remotedisplay', \" ($$gref{Name})\"); }\n }\n\n ISession_unlockMachine($$sref{ISession}) if (ISession_getState($$sref{ISession}) eq 'Locked');\n}\n\n# Displays a popup machine menu on the guest list when the right mouse button is pressed\nsub show_rmb_menu {\n my ($widget, $event) = @;\n\n # Check if it's the RMB otherwise do nothing\n if ($event->button == 3) {\n # This code is needed because if the user just presses the RMB, then GTK has not updated the\n # location of the cursor until AFTER this routine is complete meaning we will be referencing the\n # wrong V"..., 8192) = 8192
[pid 219572] brk(0x59e48c446000) = 0x59e48c446000
[pid 219572] read(15, "ost{floppy}}) {\n $added = 1;\n my $item = &gui_new_menu_item_no_mnemonic('<server drive=""> ' . IMedium_getLocation($pfloppy), 'fd_16px.png', $menu);\n $item->signal_connect('activate' => \&insert_removable_disk_first_drive, {IMedium => $pfloppy, type => 'Floppy'});\n }\n\n $menu->append(Gtk3::SeparatorMenuItem->new()) if ($added); # Only add separator if a host drive was added\n }\n\n my $IMediumRef = &get_all_media('Floppy');\n\n foreach (sort { lc($$IMediumRef{$a}) cmp lc($$IMediumRef{$b}) } (keys %$IMediumRef)) {\n my $item = &gui_new_menu_item_no_mnemonic($$IMediumRef{$</server>}, 'fd_16px.png', $menu);\n $item->signal_connect('activate' => \&insert_removable_disk_first_drive, {IMedium => $, type => 'Floppy'});\n }\n\n $gui{mi}{Floppy}->set_submenu($menu);\n}\n\n# Called from the devices menu\nsub devices_menu_add_floppy_disk {\n my ($basedir, $file) = @;\n my $IMedium = ®ister_medium(undef, {type => 'Floppy', mode => 'ReadWrite', basedir => $basedir"..., 8192) = 8192
[pid 219572] brk(0x59e48c467000) = 0x59e48c467000
[pid 219572] read(15, " {\n my ($state) = @_;\n $gui{mi}{New}->set_sensitive($state);\n $gui{mi}{Add}->set_sensitive($state);\n $gui{mi}{ImportAppl}->set_sensitive($state);\n $gui{mi}{VMM}->set_sensitive($state);\n $gui{mi}{HostNetMan}->set_sensitive($state);\n $gui{mi}{ServerInfo}->set_sensitive($state);\n $gui{mi}{VBPrefs}->set_sensitive($state);\n $gui{d}{Main}{buttonNew}->set_sensitive($state);\n $gui{d}{Main}{buttonRefresh}->set_sensitive($state);\n $gui{d}{Main}{barMem}->show();\n}\n\n# Sets the sensitivity when no guest is selected\nsub sens_unselected {\n $gui{mi}{ExportAppl}->set_sensitive(0);\n $gui{mi}{Action}->set_sensitive(0);\n $gui{mi}{Start}->set_sensitive(0);\n $gui{mi}{Stop}->set_sensitive(0);\n $gui{mi}{Pause}->set_sensitive(0);\n $gui{mi}{Resume}->set_sensitive(0);\n $gui{mi}{Settings}->set_sensitive(0);\n $gui{mi}{Clone}->set_sensitive(0);\n $gui{mi}{SetGroup}->set_sensitive(0);\n $gui{mi}{Ungroup}->set_sensitive(0);\n $gui{mi}{Discard}->set_sensitive(0);\n $gui{mi}{Res"..., 8192) = 8192
[pid 219572] brk(0x59e48c488000) = 0x59e48c488000
[pid 219572] brk(0x59e48c4aa000) = 0x59e48c4aa000
[pid 219572] read(15, "{DecPassword}{entryPass}->get_text(); }\n return $passwd;\n}\n\n# Displays the dialog for setting a guests group\nsub show_dialog_group {\n my $gref = &getsel_list_guest();\n my $sref = &get_session($$gref{IMachine});\n\n if ($$sref{Lock} ne 'None') {\n my ($group) = IMachine_getGroups($$sref{IMachine}, ('/')); # Only interested in first group entry\n $gui{d}{SetGroup}{entryGroup}->set_text($group);\n $gui{d}{SetGroup}{dialog}->show_all();\n my $response = $gui{d}{SetGroup}{dialog}->run();\n $gui{d}{SetGroup}{dialog}->hide();\n\n if ($response eq 'ok') {\n $group = $gui{d}{SetGroup}{entryGroup}->get_text();\n $group =~ s/\/+$//; # Remove any trailing slashes\n $group = \"/$group\" if ($group !~ m/^\//);\n IMachine_setGroups($$sref{IMachine}, ($group));\n IMachine_saveSettings($$sref{IMachine});\n &addrow_msg_log(\"Set group membership for $$gref{Name} to $group\");\n &fill_list_guest();\n }\n }\n\n "..., 8192) = 2449
[pid 219572] read(15, "", 8192) = 0
[pid 219572] close(15) = 0
[pid 219572] openat(AT_FDCWD, "/home/tonkol/.config/remotebox.conf", O_RDONLY|O_CLOEXEC) = 15
[pid 219572] ioctl(15, TCGETS, 0x7ffd5615c3d0) = -1 ENOTTY (Inappropriate ioctl for device)
[pid 219572] lseek(15, 0, SEEK_CUR) = 0
[pid 219572] newfstatat(15, "", {st_mode=S_IFREG|0664, st_size=828, ...}, AT_EMPTY_PATH) = 0
[pid 219572] read(15, "ADDADDITIONS=1\nAUTOCONNPROF=\nAUTOHINTDISP=0\nAUTOHINTDISPD=32\nAUTOHINTDISPX=1280\nAUTOHINTDISPY=1024\nAUTOSORTGUESTLIST=1\nDEFRDPPORTS=3389-4389\nDEFVNCPORTS=5900-5999\nEXPANDDETAUDIO=1\nEXPANDDETDESC=1\nEXPANDDETDISP=1\nEXPANDDETGEN=1\nEXPANDDETIO=1\nEXPANDDETNET=1\nEXPANDDETRUN=1\nEXPANDDETSHARE=1\nEXPANDDETSTOR=1\nEXPANDDETSYS=1\nEXPANDDETUSB=1\nEXTENDEDDETAILS=0\nGUESTLISTEXPAND=1\nRDPAUTOOPEN=1\nRDPCLIENT=xfreerdp /size:%Xx%Y /bpp:32 +clipboard /sound /t:\"%n - RemoteBox\" /v:%h:%p\nSSLVERIFY=\nSTOPTYPE=INSTANT\nURL=http://178.63.57.136:18083\nURL=http://192.168.51.2:18083\nURL=http://188.40.83.173:18083\nURL=http://192.168.50.2:18083\nURL=http://localhost:18083\nUSER=vbox\nUSER=dnas\nVNCCLIENT=vncviewer -Shared -AcceptClipboard -SetPrimary -SendClipboard -SendPrimary -RemoteResize -DesktopSize %Xx%Y %h:%p\nWINPOS_windowMain=1536:791:2858:296\n", 8192) = 828
[pid 219572] read(15, "", 8192) = 0
[pid 219572] close(15) = 0
[pid 219572] openat(AT_FDCWD, "/home/tonkol/.config/remotebox-profiles.conf", O_RDONLY|O_CLOEXEC) = 15
[pid 219572] ioctl(15, TCGETS, 0x7ffd5615c3d0) = -1 ENOTTY (Inappropriate ioctl for device)
[pid 219572] lseek(15, 0, SEEK_CUR) = 0
[pid 219572] newfstatat(15, "", {st_mode=S_IFREG|0600, st_size=82, ...}, AT_EMPTY_PATH) = 0
[pid 219572] read(15, "Unnamed-260857\7http://localhost:18083\7\7\7\nUnnamed-305316\7http://localhost:18083\7\7\7\n", 8192) = 82
[pid 219572] read(15, "", 8192) = 0
[pid 219572] close(15) = 0
[pid 219572] newfstatat(AT_FDCWD, "/etc/localtime", {st_mode=S_IFREG|0644, st_size=2298, ...}, 0) = 0
[pid 219572] brk(0x59e48c4cb000) = 0x59e48c4cb000
[pid 219572] prctl(PR_SET_NAME, "RemoteBox Virtu"...) = 0
[pid 219572] brk(0x59e48c4ed000) = 0x59e48c4ed000
[pid 219572] openat(AT_FDCWD, "/usr/share/icons/Yaru/scalable/ui/pan-down-symbolic.svg", O_RDONLY) = 15
[pid 219572] statx(15, "", AT_STATX_SYNC_AS_STAT|AT_EMPTY_PATH, STATX_TYPE, {stx_mask=STATX_BASIC_STATS|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFREG|0644, stx_size=982, ...}) = 0
[pid 219572] read(15, "\n", 8192) = 982</pass></user></host></usage;\nusage:\n>
Thank you Victor. Would you mind telling me what OS and version you're using? I'll see if I can reproduce the issue
Ok, I think I understand the issue. It's not that the profiles are not saving entirely, it's that the username and password are not being saved, is that correct? If so I have been able to reproduce that.
Hi, sure:
Distributor ID: Ubuntu
Description: Ubuntu 22.04.5 LTS
Release: 22.04
Codename: jammy
"username and password are not being saved"
yes and changes to the hostname and port are not being saved as well.
"If so I have been able to reproduce that."
Oh that sounds great.
thanks
Last edit: Viktor Tönköl 2025-05-04
Thanks Victor. When I get a chance I will do a fix and post it here for you to test if that's OK? Thanks
of course would love to :)
Diff:
Finally had a few moments to look at this. I've attached what I think is a fixed version. This is a regression caused by the migration from glade to native code. Let me know if it works for you Victor and if so I'll include it in the next official release.
Also, if it's not obvious the attachment appears just above the discussion section in this ticket.
Hi Ian,
thanks for the note on the attachments it was needed :)
thanks for the fix as well I've tested it and it works great for my setup
I could not find any issues with it, so from my perspective this bug is fixed.
Thank you very much for the project and for the quick reaction!
BR,
Viktor
Awesome Viktor. Thank you for reporting the issue
This has been fixed for the next release of RemoteBox (3.6), thanks for your assistance.