Split-Browser Bookmarks, Logins & Browsers

I have manually extracted links from my bookmarks.html file and imported it to tsv file in Calc and now I have all the bookmarks.
Regarding logins, for now I’d prefer to have them in my KeepasssXC in vault and manually copy pasting usernames and passwords. I just don’t feel safe enough to have them in a clear text file in some other AppVM.

Thanks once again for the great work here @rustybird

I found it helpful to have a way to easily delete some lines of the bookmark. Is it possible to add this function, using dmenu that’s triggered by Alt+B? I can’t imagine a way to do this. Thanks.

What does it look like? Can probably make a Python script to convert it in my free time.

+1. Only way I know so far is to manually edit the file in the offline vm.

That would be great, indeed. I’m not sure I understand your question. It’s a bookmarks.html exported from my browser?

I was asking if you could post a snippet (with random sites) of what the file looks like because I’ve never exported it. Or tell me which browser you exported from so I can replicate it.

Probably better to convert from Firefox’s / Tor Browser’s .json bookmark backup format (instead of from the legacy .html format). Here’s a first attempt at this: split-browser-bookmark-json2tsv

This is one of the things that will hopefully be solved any day now™ by the addition of a hook system - quote from an older PM:

I’m currently working on a generic “hook hotkey” feature (maybe assigned to Ctrl-!). The rough idea is that it would pop up a dmenu window where e.g. foo bar baz can be entered to launch the command ~/.local/share/split-browser/hooks/foo 'bar baz' with […] $SB_URL and $SB_TITLE of the active tab.

For example, an included hook could unbookmark the active tab’s URL (after confirmation).

Ah, OK, thanks for clarifying. Here’s a sample

<DL><p>
    <HR>    <HR>    <DT><H3 ADD_DATE="xxxxxxxxxx" LAST_MODIFIED="xxxxxx" PERSONAL_TOOLBAR_FOLDER="true">Bookmarks Toolbar</H3>
    <DL><p>
        <DT><H3 ADD_DATE="xxxxxxx" LAST_MODIFIED="xxxxx">Bookmarks bar</H3>
        <DL><p>
            <DT><H3 ADD_DATE="xxxxxxxx" LAST_MODIFIED="xxxxxx">Computers</H3>
            <DL><p>
                <DT><H3 ADD_DATE="xxxxxxxx" LAST_MODIFIED="xxxxxxx">Hardware</H3>
                <DL><p>
                    <DT><H3 ADD_DATE="xxxxxx" LAST_MODIFIED="xxxxx">Upgrade</H3>
                    <DL><p>
                        <DT><A HREF="https://ark.intel.com/compare/xxxxx" ADD_DATE="xxxxx" LAST_MODIFIED="xxxxxx">Intel® Product Specification Comparison</A>
                        <DT><A HREF="https://ark.intel.com/compare/xxxxxxx" ADD_DATE="xxxxxx" LAST_MODIFIED="xxxxxxx" ICON_URI="fake-favicon-uri:https://ark.intel.com/compare/xxxxxx" ICON="data:image/png;base64,xxxxxxxx
		    </DL><p>
...

Is there some way, in the persistent VM, to display the bookmarks?

Every command I try simply tries to open a disposable (and the disposable immediately shuts down).

Displaying the bookmarks in the persistent VM is normally triggered by just pressing Alt-b in the DisposableVM’s browser.

If you want that same bookmarks window triggered from the persistent VM, the command is split-browser-bookmark get. To be able to open a website from that, you also have have to tell it which currently running Split Browser instance to use:

SB_CMD_INPUT=/run/split-browser/cmd-... split-browser-bookmark get
1 Like

In the persistent VM, split-browser-bookmark get opens a window wider than my display [the direct result of an X motif idiot design decision I’ve had to deal with professionally for over 20 years], and two rows high. There’s nothing in it (unsurprising, I’ve saved no bookmarks), but it’s really rather disconcerting that I can’t make the window narrower or otherwise resize it. It’s specifically forbidden to do so.

Otherwise, yes, I’ve made some progress.

Let me set the context by stating I didn’t install whonix, at all. (Whonix is utterly worthless to me, it either takes MUCH too long to load a page, or it takes MUCH too long to load a blank page.) Yesterday, I was unable to start the disposable from the persistent, because of that. (However, I could simply fire up the disposable directly through the qubes menu.) Tonight I finally did get the Disposable-based firefox to open from the persistent VM either through the menu entry (probably the intended method!) or on the command line; I’ll describe that below.

But first, opening firefox in the disposable, alt-b simply opens the bookmarks menu in Firefox. It does not cause the bookmarks window to open at all. So apparently the hot key doesn’t work for some reason.

For the DVM-template’s TemplateVM I cloned a template that has a “hardened” and customized firefox on it (not quite Arkenfox, but I’m headed that way). Many of the user settings I wanted, however, were on the DVM-Template itself; I finally figured out just now that I needed to clone that as well, or I’d lose those settings. (Should have been obvious.)

OK, now what did I do to get it working at all?

The github readme tells me that if I don’t want to use whonix, I should link a certain file. However, linking implies a file and a name of the link to the file, and only one is given, so I can’t figure out what you’re trying to tell me to do. I found the file in /etc/split-browser-disp… where do you want the link?

Non-“Tor Browser” versions of Firefox should also work: Symlink [/usr/local]/etc/split-browser-disp/22-firefox.bash.EXAMPLE (or copy it, if you need to adjust the Firefox location) without the .EXAMPLE suffix.

I eventually figured out that I needed to link that file to the same directory (and I’m not sure what you need by putting /usr/local in square brackets). AND I had to rename the whonix file to .SAVE or it would be read. I ended up just renaming the firefox file and editing it because both the path and executable name were wrong [you did warn people about the path].

I think that statement in the github readme could possibly be a bit clearer.

The following error is thrown when I run split-browser on the command line in the persistent VM:

disp: Missing chrome or resource URL: resource://gre/modules/UpdateListener.jsm
disp: Missing chrome or resource URL: resource://gre/modules/UpdateListener.sys.mjs
disp: Missing chrome or resource URL: resource://gre/modules/UpdateListener.jsm
disp: Missing chrome or resource URL: resource://gre/modules/UpdateListener.sys.mjs

Also, closing the browser does NOT shut down the disposable. Is it supposed to?

Anyhow, I think I’m getting closer, but the link between the disposable browser back to the persistent machine doesn’t seem to be there quite yet.

[EDIT: UGH. Except for the missing shortcuts, it looks like a lot of previous comments in this thread covered a lot of these issues. Sorry for wasting your time with them.]

Running split-browser-bookmark add (to put some things in the menu so I can see how it looks) results in “line 24: notify-send: command not found.” but the item does get added. (Note that quotes must go around the title if it’s more than one word long, i.e., has embedded spaces.)

Oh, and what do I put in place of those three dots? And is that two separate commands?

[EDIT: Never mind that question. It looks like I’m supposed to put the DVM number.]

However, /run/split-browser will have something like cmd-1411 even though the DVM number is completely different (disp4366)! And it insists on 1411, Are the numbers supposed to match? If not, how am I supposed to know, if I have multiple disposable browsers running, which one is which?

Also, the command has no effect on the running browser. Would it, if the numbers matched?

It sounds like that Arkenfox-like setup is clobbering Split Browser on the disposable side:

That shouldn’t be necessary. The configuration values in the higher-numbered 22-firefox.bash will essentially override those in the lower-numbered 21-tor-browser.bash in the same directory.

Is there really no firefox-bin executable inside the Firefox directory? What Firefox build is this?

If the persistent side is based on debian-11-minimal, install the libnotify-bin package to get notify-send. (Although given how many dependencies that package pulls in, maybe just switch the persistent side to a non-minimal template instead.)

No, by default it would be the PID of the split-browser process. But it’s a moot point: After amending that Arkenfox-like setup you won’t have to invoke split-browser-bookmark manually at all, nor mess around with environment variables.

I’m not on Qubeville right now so I can’t try out what you’ve suggested, but I can respond to a couple of things. The firefox executable in /usr/bin is simply named “firefox” (no -bin), and there’s also a “firefox-esr” which is a link to firefox (or maybe it’s the other way around). I didn’t give the path directly to the firefox directory, I just pointed to /usr/bin.

I’m not actually using Arkenfox, but rather, I just copied a template where I did some custom settings to get rid of behavior that irks me. Nevertheless I’ll look into the chance that that is nuking the keyboard shortcuts tonight (my timezone–I get the impression you’re in a very different one than I am, perhaps in Europe. I am in UTC-7 (Mountain Time as it’s called in the US)).

Agreed if I can get the keyboard shortcuts to work then trying to invoke from the Persistent is likely unnecessary.

I’ve been pondering a more sophisticated GUI for the bookmark listing (and I know gtk well enough to struggle through it), including nesting bookmarks in folders, etc., and being able to right-click on a bookmark and pick an existing VM to open it in a popup menu, or double click on it and open the bookmark in a new DVM. (That right click would require a way to display the VM name rather than the process ID so maybe not.) It would represent a slight (and optional) change in orientation; the persistent machine could act as a “control panel” from which you could launch DVMs (pushing bookmarks rather than the DVMs pulling them), though you could still call things up from the DVMs too as today–it would look no different from that end in fact other than having a nested list. So in addition to the current mode where you start a DVM from the persistent VM’s menu, then use the DVM to request and save bookmarks (and open additional tabs), you’d be able to fire up the bookmark manager in the persistent VM and either open DVMs from it with a bookmark loaded, or send other bookmarks to an already running DVM. (Additional feature: you could even define a set of related bookmarks (put them all in the same folder) and have the DVM open all of them when it starts.) Compared to what you had to do to get the VMs talking to each other, this should be easy!

But! First things first, I have to get this working in its current configuration!

Thanks for all of your help, thus far, and in the future.

SB_FIREFOX_DIR=/usr/bin definitely can’t work, which would explain why the browser-side code (not just hotkeys but everything!) is not running. SB_FIREFOX_DIR has to point to the main Firefox installation directory, where you’ll see a bunch of Firefox related files such as platform.ini, libxul.so, firefox-bin. For Firefox ESR on Debian that directory is /usr/lib/firefox-esr. (Both the directory itself and also defaults/pref/ inside it must be made writable by the VM’s default user if the packages qubes-core-agent-passwordless-root and sudo aren’t installed.)

If Split Browser is installed from qubes-repo-contrib the path is sorted out automatically, i.e. 22-firefox.bash.EXAMPLE would already contain the correct path for your distribution.

1 Like

It’s possible I misremembered and it was actually /usr/lib not /usr/bin.

A browser definitely came up for me yesterday, and it was configured the way I configured it (before installing split-browser stuff that is). The only thing that didn’t work is the hotkeys. So I am guessing I misremembered the path when I responded earlier. Will confirm tonight. (I am definite though on there being nothing named firefox-bin wherever it was I looked.)

OK. Started out with a new disposable template, one with just straight up Firefox ESR on it (no “hardening,” no arkenfox).

It turns out the directory is indeed /usr/lib/firefox-esr (though the 22 file doesn’t have the -esr suffix).

That’s what fooled me the first time around. I saw what was in the default 22 file and tried to cd to /usr/lib/firefox and of course that didn’t exist, so I did a which on firefox and it pointed me to /usr/bin which is a softlink. Inside of /usr/lib/firefox-esr there is indeed a firefox-bin. So now that’s all set up.

Without hardening and with the correct path, it works!!!

THANK YOU.

I can try experimenting with cloning that template and trying to “harden” it to see if that works or not (I suspect it won’t but who knows?)

I’m also still thinking of trying that nested menu. Do people here object to gtk and C++? (No, I will not use gtkmm, which requires a crap-ton of additional libraries.)

One other tiny nit: on debian-11-minimal, it wouldn’t install dmenu, instead it installed something called suckless-tools. Possibly the instructions should be updated. Since the switch happens automatically, you might not feel it’s necessary to change the instructions.

Yep, using the package name dmenu makes the installation instructions compatible with more distributions in addition to Debian.

What do you think: @deeplow to split this topic from here for example, so @SteveC could marked some @rustybird’s post as a solution, so as more visible it could help other users too?

1 Like