#!/bin/sh # /home/jhs/public_html/bin/.sh/firefox-clean # http://www.berklix.com/~jhs/bin/.sh/firefox-clean # Installed to /site/usr/local/bin/firefox-clean # by: # cd ~/public_html/bin/.sh ; make install # cd /site; xs make 2dell # ls -l /usr/local/bin/firefox-clean # ln -s /site/usr/local/bin/firefox-clean /usr/local/bin/firefox-clean # Purpose: # So you can happily accept all web sites shit cookies, then purge # the whole lot as often as you like, including any that were not # even declared, eg by criminals etc, before they can seriously build # up & track you, Thus saving masses of time by not reading every # bloody web sites different policy on various cookies, deciding # if you believe them, which subset of their cookies you might or not # accept, or wondering they are thieving liars out to harvest you, # JJLATER Remove internal host names # JJLATER maybe incorporate https://addons.mozilla.org/en-US/firefox/addon/noscript/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search # Temporary hack to observe startup speed echo "firefox-clean starting `date`" > ~/tmp/firefox-clean.date cat ~/tmp/firefox-clean.date echo >> ~/tmp/firefox-clean.log cat ~/tmp/firefox-clean.date >> ~/tmp/firefox-clean.log # See Also: # http://www.berklix.com/~jhs/adverts/ # ~jhs/.fvwm/config # # This script was started 2014-04 # Written after I proved ( at http://www.berklix.com/~jhs/toytown/ ) # some companies were tracking & individually target advertising me # (& of course all people), presumably using a combination of cookies, # IP number, & exported environment. # At 2020 I see near all spam in my ~/mail/spam/phrases/ is German. # Yet vast majority of my ~/.procmailrc_phrases_src are English, # Deduction: most web sites tracking me are harvesting my German IP numbers # This script not yet with much protection. # JJLATER it would be better to invoke & run firefox from # a sand box or chroot or jail # Or from another login/uid, # including syntax from eg # http://www.berklix.com/~jhs/bin/.sh/xauth.sh # http://www.berklix.com/~jhs/bin/.sh/syntax # then I might even install flash # JJLATER write something similar for chrome, as per mail to friends 2019-03-10 # { # cc d GJ & NP. # LK. pointed me at a security vulnerability in chrome browser: # https://www.theregister.co.uk/2019/03/07/google_chrome_zero_day/ # # "The vulnerability affects Windows, Linux, Android, ChromeOS, # and macOS builds of Chrome: if you are running version # 72.0.3626.121 or higher (or 72.0.3626.122 or higher on # ChromeOS) then you are all good." # # "According to Googler Abdul Syed, the ads giant is "aware # of reports that an exploit for CVE-2019-5786 exists in the # wild," meaning criminals and other miscreants are leveraging # the bug to infect victim s computers." # # I discovered below, Chrome s been leaking data 2.5 months ! # However, Non Tech s can glaze out here & skip rest of mail, # Just do an upgrade. # ---------------------- # # FREEBSD Current: # ----------- # Binary packages: # pkg info -a | grep chrom # chromium-72.0.3626.119 Google web browser based on WebKit # # vulnerable # pkg update # did not work, but a delete & reinstall did # # upgrade, (don not now why, maybe repository upgraded) # Self built source is OK: # cd /usr/ports/www/chromium # cat distinfo # chromium-72.0.3626.121.tar.xz # make deinstall # make install # pkg info -a | grep chrom # chromium-72.0.3626.121_1 Google web browser based on WebKit # ----------- # ANDROID: # https://play.google.com/store/apps/details?id=com.android.chrome # Finaly found my release number: 72.0.3626.121 # run chrome # 3 vertical dots icon top right # Settings # About chrome # App. version # google play index page for chrome says app last updated 1 Mar # https://chromereleases.googleblog.com/2019/03/stable-channel-update-for-desktop.html # Bug also listed: Friday, March 1, 2019 # # PS: https://fossbytes.com/difference-google-chrome-vs-chromium-browser/ # Google Chrome is a web browser developed and maintained by # tech giant Google. Chrome uses the open source web browser # Chromium s source code and adds a bunch of features developed # by Google and some nonfree components. # # https://play.google.com/store/search?q=chrom&c=apps&authuser # I dont see any chromium just chrome # # http://www.f-droid.org has # an app store for free binary apps based on public sources # has an app called getchromium, works: # https://search.f-droid.org/?q=chrom&lang=en # App version: 75.0.3731.0 # That is a different number sequence # https://www.chromium.org/Home # Searching for CVE-2019-5786 # https://bugs.chromium.org/p/chromium/issues/list?can=2&q=CVE-2019-5786&sort=&groupby=&colspec=&x=&y=&mode=&cells=&num= # https://bugs.chromium.org/p/chromium/issues/detail?id=917897&q=CVE-2019-5786 # "All tested on Windows 10 + Google Chrome 71.0.3578.98, # full updated as of December 26, 2018." # # "Feb 13" "Hi Google, We plan to publish this finding. " # # "Feb 14 Are you able to make the release within next 2 # weeks? We definitely can not wait till late April... because # (1) the exploit samples are already in the wild. (2) we have # waited for ~1.5 months since late December." # # "Mar 1 by palmer@chromium.org This bug is now public, and # our policy is to open access to such bugs even if they are # not fixed. Also, making this bug public will clarify the # confused situation." # # PS 1: CVE: An index run by USA govt: # https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures # # PS 2: Reminds me I should write a sand box for chrome, like I did for firefox # http://www.berklix.com/~jhs/bin/.sh/firefox-clean # Because I have started using chrome a lot more in last month or so, # as firefox keeps crashing one me. # } # ----------------------------------------------------------------------------- name=`basename $0` mkdir -p ~/tmp orbit=~/tmp/orbit-`whoami` # I have also seen ~/tmp/orbit-`whoami`-a8e84818 if [ \! -d $orbit ]; then #{ # echo "$name: Firefox seems to not already be running, Good." else #}{ echo "$name Error: Directory exists: $orbit" # If a firefox is runnning $orbit will contain a named pipe such as # linc-61ae-0-3c8e64cba1214 echo "$name: So either Firefox is already running, or it crashed earlier." echo "$name: Suggestion: rm -rf $orbit; `basename $name`" # ---------- # I have seen an empty $orbit directory cause above message, # I assume thats from when firefox av been previously killed, & # control has not returned to a previous iteration of this script to # So that if this script is called again, # it wont fail twice but succeed second time. rm -rf $orbit # so it wont fail twice, but succeed second time. exit 1 fi #} uname=`uname -r` case $uname in #{ #( for brackets.c 9.2-RELEASE) #{ # ~/.mozilla/firefox/bqxvl6xt.default/prefs.js # ~/.mozilla/firefox/9rkadp9u.default/prefs.js default=default ;; #} #( for brackets.c 12.1-STABLE) #{ # ~/.mozilla/firefox/9mzqwp30.default-release/prefs.js default=default-release ;; #} #( for brackets.c 12.2-RELEASE) #{ default=default-release ;; #} #( for brackets.c 12.2-STABLE) #{ # ~/.mozilla/firefox/9j7uy4ms.default-esr/prefs.js # default=default-esr # Not =default cos about 2020-12-15, pkg install firefox # started faliing, but pkg install firefoxesr was ok. default=default-release ;; #} #( for brackets.c 12.3-RELEASE) #{ default=default-release ;; #} #( for brackets.c 12.3-STABLE) #{ default=default-release ;; #} #( for brackets.c 13.0-CURRENT) #{ default=default-release ;; #} #( for brackets.c *) #{ default=default echo "$name: Please edit uname case list 0, add $uname" ;; #} esac #} createit=no # if [ \! -d $HOME/.mozilla_empty ]; then #{ # echo "$name: Please mkdir $HOME/.mozilla_empty" # createit=yes # fi #} if [ \! -d $HOME/.mozilla_empty/firefox ]; then #{ echo "$name: Please mkdir -p $HOME/.mozilla_empty/firefox" createit=yes fi #} # Next true is to satisfy brackets.c if [ \! -d $HOME/.mozilla_empty/firefox/`true`*.$default ]; then #{ # Next `true` is to seperate slash star C delimiter # to satisfy brackets.c echo -n "$name: Please create directory " echo "$HOME/.mozilla_empty/firefox/`true`*.$default" createit=yes fi #} oldprefs=$HOME/.mozilla_empty/firefox/`true`*.$default/prefs.js ## if [ \! -f $HOME/.mozilla_empty/firefox/`true`*.$default/prefs.js ]; then if [ \! -f ${oldprefs} ]; then #{ echo "$name: Please create: ${oldprefs}" createit=yes fi #} if [ "X${createit}" = "Xyes" ]; then #{ echo "$name: You must build ~/.mozilla_empty" echo "$name: Read `which $name`" echo "$name: Or Do this:" echo "$name: cd ~; rm -rf ~/.mozilla ~/.cache/.mozilla ~/.mozilla_empty" echo "$name: firefox" echo "$name: echo Edit preferences in firefox, till xterm shows it has created:" echo "$name: ls -l ~/.mozilla/firefox/`true`*.default*`true`/prefs.js" # Usage of `true`: # a subterfuge to seperate chars of / * and * / # being C escape sequence for start and end of comment, # to avoid brackets.c complaining of syntax error, umatched. # ~/.mozilla_empty/firefox: # h8lz4rwy.default/ p4aj5oja.default-release/ echo "$name: echo 'Exit firefox'" echo "$name: mv ~/.mozilla ~/.mozilla_empty" # 2019-06-05 on current I notice no prefs.js just times.json # 4310 v3sum8wn.default-release/prefs.js # 50 v3sum8wn.default-release/times.json # 47 vfug1k26.default/times.json* case $uname in #{ #( for brackets.c 9.2-RELEASE) #{ # echo "$name: cp prefs.js ../`true`*.default/prefs.js" # identical in 9.2-RELEASE ;; #} #( for brackets.c 12.1-STABLE) #{ echo "$name: (cd ~/.mozilla_empty/firefox/`true`*.$default ; \\" echo "$name: cp prefs.js ../`true`*.default/ )" # identical in 9.2-RELEASE ;; #} #( for brackets.c 12.2-RELEASE) #{ echo "$name: (cd ~/.mozilla_empty/firefox/`true`*.$default ; \\" echo "$name: cp prefs.js ../`true`*.default/ )" ;; #} #( for brackets.c 12.2-STABLE) #{ echo "$name: (cd ~/.mozilla_empty/firefox/`true`*.$default ; \\" echo "$name: cp prefs.js ../`true`*.default/ )" ;; #} #( for brackets.c 12.3-RELEASE) #{ echo "$name: (cd ~/.mozilla_empty/firefox/`true`*.$default ; \\" echo "$name: cp prefs.js ../`true`*.default/ )" ;; #} #( for brackets.c 12.3-STABLE) #{ echo "$name: (cd ~/.mozilla_empty/firefox/`true`*.$default ; \\" echo "$name: cp prefs.js ../`true`*.default/ )" ;; #} #( for brackets.c 13.0-CURRENT) #{ echo "$name: (cd ~/.mozilla_empty/firefox/`true`*.$default ; \\" echo "$name: cp prefs.js ../`true`*.default/ )" ;; #} #( for brackets.c *) # { echo "$name: Please edit uname case list 1, add $uname" ;; #} esac #} # 2020-07-12 I see ~/.mozilla/firefox/g3szlq94.default/ # mimeTypes.rdf # echo "$name: find ~/.mozilla* -name mimeTypes.rdf | xargs ls -l" # There is no mimeTypes.rdf yet. echo "$name: Maybe: rm -rf tmp/orbit-`whoami`" echo "$name: $name" exit 1 fi #} olddir=`cd $HOME/.mozilla_empty/firefox/*.$default;/bin/pwd` case $uname in #{ #( for brackets.c 9.2-RELEASE) #{ oldmimeTypes=`echo $olddir/mimeTypes.rdf` if [ \! -f ${oldmimeTypes} ]; then #{ echo "$name Caution: File does not exist:" echo "$name Caution: ${oldmimeTypes}" echo "$name Caution: It is not created at least initially on 12.1-STABLE but is on 9.2-RELEASE" echo "$name Caution: If you want it on 9.2-RELEASE you can rebuild ~/.mozilla_empty :" echo "$name Caution: Read `which $name`, or Do this:" echo "$name Caution: cd ; rm -rf ~/.mozilla ~/.cache/.mozilla ~/.mozilla_empty" echo "$name Caution: Immediately exit next firefox," echo "$name Caution: firefox ; mv ~/.mozilla ~/.mozilla_empty; $name" else #}{ # echo "$name: OK, existant ${oldmimeTypes}" fi #} ;; #} #( for brackets.c 12.1-STABLE) #{ # creates no mimeTypes.rdf Nothing to do ;; #} #( for brackets.c 12.2-RELEASE) #{ # creates no mimeTypes.rdf Nothing to do ;; #} #( for brackets.c 12.2-STABLE) #{ # creates no mimeTypes.rdf Nothing to do ;; #} 12.3-RELEASE) #{ # creates no mimeTypes.rdf Nothing to do ;; #} 12.3-STABLE) #{ # creates no mimeTypes.rdf Nothing to do ;; #} #( for brackets.c 13.0-CURRENT) #{ # creates no mimeTypes.rdf Nothing to do ;; #} #( for brackets.c *) #{ echo "$name: Please edit uname case list 2, add $uname" ;; #} esac #} rm -rf ~/.mozilla # Purge all hidden privacy encroachment, wherever. rm -rf ~/.cache/mozilla cp -R ~/.mozilla_empty ~/.mozilla newdir=`cd $HOME/.mozilla/firefox/*$default;/bin/pwd` newprefs=`echo $newdir/prefs.js` case $uname in #{ #( for brackets.c 9.2-RELEASE) #{ # newmimeTypes=`echo $HOME/.mozilla/firefox/*default/mimeTypes.rdf` newmimeTypes=`echo $newdir/mimeTypes.rdf` ;; #} #( for brackets.c 12.1-STABLE) #{ ;; #} #( for brackets.c 12.2-RELEASE) #{ ;; #} #( for brackets.c 12.2-STABLE) #{ ;; #} #( for brackets.c 12.3-RELEASE) #{ ;; #} #( for brackets.c 12.3-STABLE) #{ ;; #} #( for brackets.c 13.0-CURRENT) #{ ;; #} #( for brackets.c *) #{ echo "$name: Please edit uname case list 3, add $uname" ;; #} esac #} cp $newprefs ~/tmp/.$name.$$ # Strip suspicious obfuscated things. cat ~/tmp/.$name.$$ \ | grep -v app.update \ | grep -v browser.newtabpage.blocked \ | grep -v datareporting.sessions \ | grep -v extensions.enabledAddons \ | grep -v extensions.installCache \ | grep -v intl.charsetmenu.browser.cache \ | grep -v pdfjs.database \ > $newprefs # intl.charsetmenu.browser.cache is purged cos I hate UTF-8 that it asserts rm ~/tmp/.$name.$$ # Below, I could read in $FTPSERVER, to make it more generic for other sites # & users, but that would need work to get the quotes & delimeters right, # & hardly seems worth it, as: # - "gate" is a pretty generic name people could easily put in their # DNS or /etc/hosts. # - It might more likely break as other people may not have FTPSERVER set. # Prefs below I may later move out to be user, host or site dependent. # When eg remote browsing using a laptop on WLAN with NAT & no proxy. # echo 'user_pref("browser.cache.disk.capacity", 51200);' >> $newprefs echo 'user_pref("browser.cache.disk.capacity", 0);' >> $newprefs # To disable cache for when I am editing local files with vi & want to review. echo 'user_pref("browser.cache.disk.smart_size.enabled", false);' \ >> $newprefs echo 'user_pref("browser.download.useDownloadDir", false);' >> $newprefs echo 'user_pref("browser.search.update", false);' >> $newprefs echo 'user_pref("browser.shell.checkDefaultBrowser", false);' >> $newprefs echo 'user_pref("browser.startup.homepage", "http://www.berklix.net/search/");' \ >> $newprefs echo 'user_pref("datareporting.healthreport.uploadEnabled", false);' \ >> $newprefs echo 'user_pref("general.smoothScroll", false);' >> $newprefs echo 'user_pref("intl.accept_languages", "en,fr,de,it,nl,sp");' >> $newprefs # Observe with http://www.berklix.net/cgi-bin/printenv/ # HTTP_ACCEPT_LANGUAGE="en,fr;q=0.8,de;q=0.7,it;q=0.5,nl;q=0.3,sp;q=0.2" echo 'user_pref("layout.spellcheckDefault", 0);' >> $newprefs echo 'user_pref("widget.gtk.overlay-scrollbars.enabled", false);' \ >> $newprefs xx=`hostname -s` ; domain=`hostname|sed -e "s/$xx.//"` ; unset xx case $domain in #{ #( for brackets.c "js.berklix.net") #{ echo 'user_pref("network.proxy.backup.ftp", "");' \ >> $newprefs echo 'user_pref("network.proxy.backup.ftp_port", 0);' \ >> $newprefs echo 'user_pref("network.proxy.backup.socks", "");' \ >> $newprefs echo 'user_pref("network.proxy.backup.socks_port", 0);' \ >> $newprefs echo 'user_pref("network.proxy.backup.ssl", "");' \ >> $newprefs echo 'user_pref("network.proxy.backup.ssl_port", 0);' \ >> $newprefs echo 'user_pref("network.proxy.ftp", "gate");' >> $newprefs echo 'user_pref("network.proxy.ftp_port", 80);' >> $newprefs echo 'user_pref("network.proxy.http", "gate");' >> $newprefs echo 'user_pref("network.proxy.http_port", 80);' \ >> $newprefs # JJLATER Remove internal host names # echo 'user_pref("network.proxy.no_proxies_on", "localhost, 127.0.0.1, blak,deli,dell,dual,erik,film,fire,gate,john,king,lapa,lapd,laph,lapl,lapn,lapo,lapr,laps,loft,mart,mini,park,rain,scan,slim,snow,sony,test,thin,wind");' \ # JJLATER jhs-hv cant read as: # cd ~jhs/private/bin Permission denied. hosts=`/site/usr/local/bin/hosts | sed -e 's/ /, /g'` echo 'user_pref("network.proxy.no_proxies_on", "localhost, 127.0.0.1, '"$hosts"'");' \ >> $newprefs # js.berklix.net is temporarily removed (as it blocks proxy for # ap.w0.js.berklix.net), pending a named re-config # to move internal hosts to *.e0.js.berklix.net echo 'user_pref("network.proxy.share_proxy_settings", true);' >> $newprefs echo 'user_pref("network.proxy.socks", "gate");' \ >> $newprefs echo 'user_pref("network.proxy.socks_port", 80);' \ >> $newprefs echo 'user_pref("network.proxy.ssl", "gate");' >> $newprefs echo 'user_pref("network.proxy.ssl_port", 80);' >> $newprefs echo 'user_pref("network.proxy.type", 1);' >> $newprefs ;; #} #( for brackets.c "no.berklix.net") #{ ie wireless lan, let it run through natd ;; #} esac # } echo 'user_pref("pref.browser.language.disable_button.down", false);' \ >> $newprefs echo 'user_pref("pref.browser.language.disable_button.remove", false);' \ >> $newprefs echo 'user_pref("pref.browser.language.disable_button.up", false);' \ >> $newprefs echo 'user_pref("print_paper_height", "297.00");' >> $newprefs echo 'user_pref("print_paper_name", "iso_a4");' >> $newprefs echo 'user_pref("print_paper_width", "210.00");' >> $newprefs echo 'user_pref("print_to_filename", "$HOME/tmp/firefox.pdf");' >> $newprefs echo 'user_pref("print_unwriteable_margin_bottom", 56);' >> $newprefs echo 'user_pref("print_unwriteable_margin_left", 25);' >> $newprefs echo 'user_pref("print_unwriteable_margin_right", 25);' >> $newprefs echo 'user_pref("print_unwriteable_margin_top", 25);' >> $newprefs echo 'user_pref("privacy.donottrackheader.enabled", true);' >> $newprefs echo 'user_pref("signon.rememberSignons", false);' >> $newprefs echo 'user_pref("widget.gtk.overlay-scrollbars.enabled", false);'>> $newprefs # Revert to old behaviour: Always show scroll bars. # There are a whole load more settings shown by typing about:config into URL box, # than appear in prefs.js, eg javascript.enabled # One can find with /java then right click on java line then right # click on Toggle. # After setting them, on exiting firefox, they then get exported to prefs.js # echo 'user_pref("javascript.enabled", false);' >> $newprefs # echo 'user_pref("javascript.enabled", true);' >> $newprefs # I have checked that if there is a double setting, the last one takes effect, # & only the last one is saved back to prefs.js. # Add handlers to mimeTypes.rdf for .pdf & .ps & .c & .diff etc # This section below { was to # Add .pdf & .ps handlers to mimeTypes.rdf # However I dont need it as PDF gets displayed internaly, # & postscript auto invokes ghostview if found. # Only problem is although FreeBSD-9.2-RELEASE has both # -rwxr-xr-x 1 root wheel 126128 Jan 24 2014 /usr/local/bin/ghostview* # -rwxr-xr-x 1 root wheel 1356308 Jan 24 2014 /usr/local/bin/gv* # FreeBSD 12.0-CURRENT has no /ur/ports/print/ghostview, only gv, # so manually do: ln -s gv /usr/local/bin/ghostview # Retain header block: # # # # # # # # # Put new stuff before footer (easier than stripping & rebuilding multi line header). # Strip footer line. case $uname in #{ #( for brackets.c 9.2-RELEASE) #{ grep -v '' $newmimeTypes > ~/tmp/.$name.$$ ;; #} #( for brackets.c 12.1-STABLE) #{ cp /dev/null ~/tmp/.$name.$$ ;; #} #( for brackets.c 12.2-RELEASE) #{ cp /dev/null ~/tmp/.$name.$$ ;; #} #( for brackets.c 12.2-STABLE) #{ cp /dev/null ~/tmp/.$name.$$ ;; #} 12.3-RELEASE) #{ cp /dev/null ~/tmp/.$name.$$ ;; #} 12.3-STABLE) #{ cp /dev/null ~/tmp/.$name.$$ ;; #} #( for brackets.c 13.0-CURRENT) #{ cp /dev/null ~/tmp/.$name.$$ ;; #} #( for brackets.c *) #{ echo "$name: Please edit uname case list 4, add $uname" ;; #} esac #} # Append handlers # I dont need to handle PDF as it gets displayed internaly, # echo ' > ~/tmp/.$name.$$ # echo ' NC:path="/usr/local/bin/xpdf" NC:prettyName="xpdf" />'\ # >> ~/tmp/.$name.$$ # I dont need to handle postscript as it auto invokes ghostview if found. # Only problem is although FreeBSD-9.2-RELEASE has both # -rwxr-xr-x 1 root wheel 126128 Jan 24 2014 /usr/local/bin/ghostview* # -rwxr-xr-x 1 root wheel 1356308 Jan 24 2014 /usr/local/bin/gv* # FreeBSD 12.0-CURRENT has no /ur/ports/print/ghostview, only gv, # so manually do: ln -s gv /usr/local/bin/ghostview # I think OK for FreeBSD 9.2-RELEASE, but did not work for host=lapr 12.0-CURRENT # echo ' > ~/tmp/.$name.$$ # echo ' NC:path="/usr/local/bin/gv" NC:prettyName="gv" />'\ # >> ~/tmp/.$name.$$ # Add handler for a diff of a .c file : echo ' > ~/tmp/.$name.$$ echo ' NC:path="/usr/local/bin/xvile" NC:prettyName="xvile" />'\ >> ~/tmp/.$name.$$ # Append new footer. echo '' >> ~/tmp/.$name.$$ case $uname in #{ #( for brackets.c 9.2-RELEASE) #{ cat ~/tmp/.$name.$$ > $newmimeTypes ;; #} #( for brackets.c 12.1-STABLE) #{ ;; #} #( for brackets.c 12.2-RELEASE) #{ ;; #} #( for brackets.c 12.2-STABLE) #{ ;; #} #( for brackets.c 12.3-RELEASE) #{ ;; #} #( for brackets.c 12.3-STABLE) #{ ;; #} #( for brackets.c 13.0-CURRENT) #{ ;; #} #( for brackets.c *) # { echo "$name: Please edit uname case list 5, add $uname" ;; #} esac #} rm ~/tmp/.$name.$$ # } # Temporary hack to observe startup speed echo "firefox-clean about to call firefox `date`" > ~/tmp/firefox-clean.date cat ~/tmp/firefox-clean.date cat ~/tmp/firefox-clean.date >> ~/tmp/firefox-clean.log rm ~/tmp/firefox-clean.date # JJLATER I could make it harder for trackers by # pppctl down # See ~/private/html/bin/.csh/dsl # sleep 5 # Let someone else acqure last D-DNS IP. # however, bad idea as other processes host & wlan may be using net, # maybe depend on domain eg # js.berklix.com: no down # no.berklix.net: yes down if [ "x$#" == "x0" ] ; then #{{ # firefox # pre 2021-01-20 firefox http://localhost/~jhs/ else #}{ firefox $* # I could reduce it to just $1 fi #}} # rmdir ~/tmp/orbit-`whoami` # complains Directory not empty rm -rf ~/tmp/orbit-`whoami` echo "$name: Later consider using /usr/local/bin/ Xnest Xephyr"