Contents
- Editorial
-
December 2018
Last month I provided a couple of scripts that made it easy to do Remote Desktop operations in Fatdog64. The same two scripts should work equally as well in other Puppy Linux distributions providing you have the dependency software installed.
I also said I would provide the code for a GUI to complement these scripts which is in the Scripts & Code section this month. I really need to give credit to CatDude, step and jamesbond for their help on this project. Take a bow gentlemen and thank you.
Most of you would know I'm a real Fatdog64 aficionado and for others like myself, you won't be disappointed in the latest release of Fatdog64-800. It is currently at the Alpha stage but it really is way more mature than that.
This is the 24th edition of this newsletter, that's a full two years. I only expected to take on this role for about twelve months then I thought someone else might step up to the plate and have a go. Unfortunately this has not happened and I'm starting to suffer a bit of burn out. I have quite a few competing priorities. I might just have to go back to work so I can have a rest. I was told by many that one can become quite busy in retirement, it appears to be true. Don't misunderstand me, I have thoroughly enjoyed managing and writing for this newsletter and will probably continue to do so in one way or another. I would just like someone else to take on the responsibility for a while. If anyone is interested please contact me on the email in the Newsletter Information section.
I hope you all have a very Merry Christmas and Santa is very accommodating.
Best Regards
smokey01
- Distro's
-
The Puppy Linux Discussion Forum is the main source for a lot of the information repeated here. Where appropriate, links will be provided so you can read first hand about the distribution development. This section will likely just provide highlights as a starting point.
Xenialpup-7.5 - 666philb
Fatdog64-800 Alpha - Kirk, jamesbond, SFR and step.
- Xenialpup
-
Created by 666philb
Although Xenialpup 7.5 was released about twelve months ago it has finally turned up on Distrowatch. It's not easy to have your distribution recognised on distrowatch as there is a very long waiting list.
This being the case Xenialpup continues to be a very popular Puppy Linux distribution.
If Xenialpup seems familiar that's because I announced an earlier version back in May 2017.
- Fatdog64-800a
-
Written by
Fatdog64-800 Alpha was released on 16 November 2018.
Read all about it in the Puppy Linux Forums.
The Fatdog64 team is pleased to announce the debut of the next generation Fatdog64 GNU/Linux system.
The base of Fatdog64-800 is LFS 8.2 (Linux From Scratch) with CLFS 2017.17, and packages updated to the later or latest BLFS.
The alpha repository comprises over 1700 packages and many more will be added by the official full release.
Fatdog64 is a new major version line and does not upgrade from any of older versions. Save file/folders from older versions aren't compatible. Start a fresh save file/folder. A few older packages may still work, but in general they aren't supported and you should upgrade to the new package version. The same applies for SFS archives.
In spite of the Alpha label, the quality of this release is probably closer to Beta. The developers have been using this version in their daily work for several months before this release.
Please report all bugs to the forum support thread.
Changes from 721:
The following list of updates, new features and changes is only partial.
Updates:
* Full system rebuild with major package updates.
* Linux Kernel 4.19.1
* gcc 7.3.0
* glibc 2.27
* eudev 3.2.5
* GTK+ 2.24.32 with Glib 2.58.1 with GTK+ 3.22.30 in the repo
* Qt 5.11.1 (partial) with Qt 4.8.7 in the repo
* Xorg-1.20.3
* Mesa-18.2.3
* xf86-video-amdgpu-18.1.0
* xf86-video-ati-18.1.0
* xf86-video-intel-2.99.18
* ALSA 1.1.6
* libinput 1.12.2
* libgcrypt 1.8.2
* VLC-3.0.4
* ffmpeg 4.0
* CUPS 2.1.3
* LibreOffice 6.1.3.1
* OpenSSL 1.1.0i
* Openbox 3.6.1
* LxQt Panel Qt5 0.12.0
* Seamonkey 2.49.4 with agent switcher
* Flash plugin 31.0.0.108 with 11.2.202.644 in the repo
* Bluez 5.50
* SMB Browser 2.0.0
* Wine 3.16 supporting 32-and 64-bit Windows applications
* Various system tools updates
* Hundreds of other package upgrades
* The full list of updates will be published in the official release announcement
New Features:
* Numerous ROX-Filer enhancements (rox-filer-jun7)
* Click actions for many file types
* More accurate drive icons
* Several new Control Panel applets
* Haveged daemon
* Heavily revamped Samba Browser. Try it!
* The full list of new features will be published in the official release announcement
Changes:
* Fotoxx back into the base system (Viewnior remains the default image viewer)
* AVIdemux into the base system
* TigerVNC viewer replaces TightVNC viewer
* Stronger system password encryption
Modules (drivers):
* Improved connectivity with selected TP-Link and Netgear USB wireless adapters
Repo:
* New package repository
* New SFS repository
Known Issues:
(See next post)
----
Get it from ibiblio or from one of its mirrors: aarnet, uoc.gr, and nluug.nl.
Packages can be installed from the Control Panel > System > Gslapt Package Manager applet (click Update first).
SFS-es can be installed from the Control Panel > System > SFS Manager applet.
Thanks to all who will test Fatdog64-800 Alpha! Make sure you use a new savefile or savefolder for testing. Please report all issues to this support thread.
- Software
-
This months covers: tree - Display folders and files in a tree format.
- tree
-
Written by smokey01
Tree is an excellent command line utility than can be quite useful.
In a terminal, typing: tree /usr/doc on my computer produces the following results:
# tree /usr/doc
/usr/doc
├── axel-2.4
│ ├── API
│ ├── axel.SlackBuild
│ ├── CHANGES
│ ├── COPYING
│ ├── CREDITS
│ └── README
└── conky-1.9.0
├── AUTHORS
├── ChangeLog
├── config_settings.html
├── conky.SlackBuild
├── COPYING
├── docs.html
├── extras
│ ├── nano
│ │ ├── conky.nanorc
│ │ └── README
│ └── vim
│ ├── ftdetect
│ │ └── conkyrc.vim
│ ├── README
│ └── syntax
│ └── conkyrc.vim
├── INSTALL
├── lua.html
├── NEWS
├── README
├── TODO
└── variables.html
7 directories, 23 files
# tree --help
usage: tree [-acdfghilnpqrstuvxACDFJQNSUX] [-H baseHREF] [-T title ]
[-L level [-R]] [-P pattern] [-I pattern] [-o filename] [--version]
[--help] [--inodes] [--device] [--noreport] [--nolinks] [--dirsfirst]
[--charset charset] [--filelimit[=]#] [--si] [--timefmt[=]<f>]
[--sort[=]<name>] [--matchdirs] [--ignore-case] [--] [<directory list>]
------- Listing options -------
-a All files are listed.
-d List directories only.
-l Follow symbolic links like directories.
-f Print the full path prefix for each file.
-x Stay on current filesystem only.
-L level Descend only level directories deep.
-R Rerun tree when max dir level reached.
-P pattern List only those files that match the pattern given.
-I pattern Do not list files that match the given pattern.
--ignore-case Ignore case when pattern matching.
--matchdirs Include directory names in -P pattern matching.
--noreport Turn off file/directory count at end of tree listing.
--charset X Use charset X for terminal/HTML and indentation line output.
--filelimit # Do not descend dirs with more than # files in them.
--timefmt <f> Print and format time according to the format <f>.
-o filename Output to file instead of stdout.
-------- File options ---------
-q Print non-printable characters as '?'.
-N Print non-printable characters as is.
-Q Quote filenames with double quotes.
-p Print the protections for each file.
-u Displays file owner or UID number.
-g Displays file group owner or GID number.
-s Print the size in bytes of each file.
-h Print the size in a more human readable way.
--si Like -h, but use in SI units (powers of 1000).
-D Print the date of last modification or (-c) status change.
-F Appends '/', '=', '*', '@', '|' or '>' as per ls -F.
--inodes Print inode number of each file.
--device Print device ID number to which each file belongs.
------- Sorting options -------
-v Sort files alphanumerically by version.
-t Sort files by last modification time.
-c Sort files by last status change time.
-U Leave files unsorted.
-r Reverse the order of the sort.
--dirsfirst List directories before files (-U disables).
--sort X Select sort: name,version,size,mtime,ctime.
------- Graphics options ------
-i Don't print indentation lines.
-A Print ANSI lines graphic indentation lines.
-S Print with CP437 (console) graphics indentation lines.
-n Turn colorization off always (-C overrides).
-C Turn colorization on always.
------- XML/HTML/JSON options -------
-X Prints out an XML representation of the tree.
-J Prints out an JSON representation of the tree.
-H baseHREF Prints out HTML format with baseHREF as top directory.
-T string Replace the default HTML title and H1 header with string.
--nolinks Turn off hyperlinks in HTML output.
---- Miscellaneous options ----
--version Print version and exit.
--help Print usage and this help message and exit.
-- Options processing terminator.
#
A switch I particularly like is -C for colorization.
Another nice one is tree -H . > /root/output.html.
Do the above command in the folder you wish to capture.
EG: cd /usr/doc then tree -H . > /root/output.html
You can also add some colour to the file /root/output.html by:
tree -C -H . > /root/output.html
When you click on output.html it will load in your browser and all of the files become hyperlinks.
- Tutorials
-
mtPaint - An excellent help tutorial by don570.
SSH - A very informative article written by Terry Schuster.
- mtPaint
-
Simple paint tutorial - Written by don570
This paint tutorial was started by don570 way back on Fri May 30, 2014 8:40 am. Since then it has grown to eight pages and 111 posts of useful information.
MtPaint is one of those programs that has been part of Puppy from the very early days.
On first inspection mtPaint appears to be quite basic with limited functionality. But if you have a closer look under the hood, you will see much more.
Don570 has done a great job highlighting some of these not so obvious features.
Have a read of the information in the Puppy Linux Forum - Simple paint tutorial.
- SSH Article
-
Written by Terry Schuster
SECURE SHELL Remote Access
Setup for PUPPY LINUX as Server
SSH stands for Secure Shell, an internet protocol which allows access to the terminal of a computer by a remote device. The guest or CLIENT on the remote device logs in to a terminal screen in the HOST computer which acts as server. This allows the client to have control over the host device, running scripts and launching CLI applications, and with suitable settings, GUI applications also. Excellent client applications exist for most operating systems including Android which means, for example, one can access a desktop computer with a mobile phone.
When running devices such as a media server, datalogger or security camera, access and ability to control the device using SSH can prove invaluable. The server device need not have a keyboard, mouse or display screen when fully operational, but does need to be setup for access over a LAN requiring automatic running of the server program on startup and a LAN static IP address.
This article primarily deals with the installation and running of Puppy Linux as a SSHD-server, as SSH-client works in Puppy Linux without much tweaking. These instructions have been tested with Tahrpup 6.0.5, LXPup 15.4 and LX Bionic Pup 18.04. As Puppy Linux is a very light OS, the system requires more configuration to run SSH as a server, which is not the case for Ubuntu or other relatively lightweight distros such as Raspberian or Antix. Despite this, one can argue that the advantages of running a Puppy Linux SSH server outweigh the inconvenience of the setup arrangements.
1) SSH should be installed in all puppies by default. Despite the name, this is only the client part of SSH, which allows one to log in to a host computer running another OS such as Raspberry Pi, Ubuntu, Antix, etc. Confirm this installation by looking for the ssh_config file in /etc/ssh. It is not necessary to edit this file, although in some cases a change in permissions of this file may be required to run as server.
If another Linux Distro (eg Ubuntu) is running an SSH server on the same LAN, you can test the operation of the Puppy as a client as per step 10. This is not essential because we can test the operation of the SSH-client on the local or host device as per step 8 as part of the setup.
2) To run SSH as a server, one needs to install SSHD - the SSH Daemon Server, which listens at port 22 (or otherwise configured) for clients requesting access to the Host Secure Shell. The host software Openssh-server can be installed from the PPM. As of LX Bionic pup, the version is 7.6p1, and on earlier Tahrpuppies it is 6.6.1p1.
3) After installation of Openssh-server from the PPM, open the main SSH folder found at /etc/ssh. This folder must have two config files: ssh_config and sshd_config, plus a file called moduli.
In the likely event that the default sshd_config file does NOT exist, download the script from:
https://github.com/openssh/openssh-portable/blob/master/sshd_config
This script must be pasted into a newly created text file, or an existing shell script which is gutted, populated with the sshd script and then re-named. Permissions may need to be changed to make the file editable or accessible.
Failing that, copy the file from another operating Linux distribution where SSHD is installed. However, it is better to start with a default script.
4) The sshd_config file must now be edited to operate under Puppy Linux.
From experience, some of the lines below in the script seem to be more critical than others, as indicated in the RHS (#) comments. Remove any “#” comment tags on the LHS of the lines listed below and edit as shown. Optional lines should be able to be left as comments as these are the default configurations.
Port 22 # Optional, as this is the default
AddressFamily any # Optional ?
LoginGraceTime 2m # Optional
PermitRootLogin yes # Critical for puppy linux
PubkeyAuthentication no # Critical for initial use
PasswordAuthentication yes # Critical for initial use
PermitEmptyPasswords yes # Optional, otherwise use no
ChallengeResponseAuthentication yes # Critical for initial use
UsePAM no # Critical
AllowTcpForwarding yes # Optional ?
X11Forwarding yes # If one wishes to run GUI applications in the host computer
X11DisplayOffset 10 # Recommended
X11UseLocalhost yes # Optional ?
PrintMotd no # Optional ?
TCPKeepAlive yes # Optional ?
Subsystem sftp /usr/lib/openssh/sftp-server # Optional ?
5) One is now ready to start the SSHD server in the terminal: /etc/init.d/ssh start.
There should be error messages displayed, as not all features have been setup. Ignore these for now.
6) In any case, one can now check that SSH is running.
In the terminal run netstat -tupan which will give a list of ALL ports on which the host device is listening.
The line(s) we are seeking references port 22, which looks like the following:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6866/sshd
For a shorter output, which only lists port 22, use: netstat -anplt | grep :22 (care with spaces)
which, if SSHD is operating should give:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6866/sshd
No listing of port 22 will mean that SSH is not running and the setup will need checking.
7) The next step is to check that the files /etc/hosts.allow and /etc/hosts.deny are correctly set.
Apparently, as Puppy Linux runs with “root” as user, the OS is setup to automatically disallow access to most ports as a safety measure.
Remove or comment with a # ALL: ALL in hosts.deny and change the data in hosts.allow to:
ALL: LOCAL
SSH: ALL
This tweak is also critical in other applications which require remote access, such as streaming music using MPD.
8) Ensure your firewall is turned off for the testing of the local SSH. SSHD should be able to connect into the local host before any attempt is made to use a separate client device.
Test the setup in the terminal using : ssh -vvv root@localhost
OR ssh -vvv root@127.0.0.1 ( where 127.0.0.1 is the IP address of the localhost determined by the use of ifconfig )
Setting the switch to -vvv will give an extended verbose output in order to see where the operation stopped. For less information, use -v instead.
It is likely that SSHD will run until the following error is reported:
debug1: SSH2_MSG_KEXINIT sent
Read from socket failed: Connection reset by peer
OR ssh_exchange_identification: read: Connection reset by peer
OR ssh_exchange_identification: read: Closed by unknown
9) It seems to be an artifact of Puppy OSES that even though “PubkeyAuthentication” is set to “no” in the config file, SSHD still requires the keys to be generated in order to pass through to the operational stage. These keys are supplied by client device to access a remote SSHD which should not be needed as we are configuring a local SSHD device.
Properly generated host and Pubkey files (as seen below) will be saved in the /etc/ssh folder which is in the same directory as ssh_config and sshd_config files. These keys seem to be automatically generated in other Linux distros when SSHD is first run.
host_key
host_key.pub
ssh_host_dsa_key
ssh_host_dsa_key.pub
ssh_host_rsa_key
ssh_host_rsa_key.pub
These keys are generated by the client device and then added manually to the host device, which will then check if the device requesting access has registered keys. As these keys are of practical use in replacing a password, their availability is an advantage. However, password authentication is a necessity when first setting up SSHD and in registering the public keys of the client device.
( See reference #1 and addendum (d) for further details )
Setup the generation of these keys via the following steps in the terminal:
Run ssh-keygen and follow the prompts, generating the host_key above.
Run ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa generating the host_rsa keys above.
Run ssh-keygen -f /etc/ssh/ssh_host_dsa_key -N '' -t dsa generating the host_dsa keys above.
Should the host_key and host_key.pub not be generated, use the following:
ssh-keygen -f /etc/ssh/ssh_host_key -N '' which should produce the required keys.
However, SSHD seems to run without these latter keys which are present on other OS SSH folders.
Run ssh -vvv root@localhost again. If all is well, you will be asked for permissions to continue:
Are you sure you want to continue connecting (yes/no)?
And you enter “yes” without quotes.
The script should then continue through to the password request:
debug1: Next authentication method: password
terkath@198.162.2.3's password: ( or similar)
Unless changed by the passwd command in the terminal the password for the user “root” will be “woofwoof” without the quotes.
All being well, the script will then resume, running through to the end of the script:
debug2: channel_input_status_confirm: type 99 id 0
debug2: shell request accepted on channel 0
The cursor username will change from "root#" to "#" - a subtle sign that the SSHD operation is successful. On a remote device this can be tested by typing in a command via the terminal, such as ifconfig, which will give the IP of the host device rather than the remote device.
[ In more standard distros, an announcement is made of the access to the SSH terminal, and an indication of the usernames involved - eg:
clinetusername@hostusername:
Linux terkath 4.10.5-antix.1-486-smp #1 SMP Fri Mar 24 17:15:57 EET 2017 i686
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law.
No mail.
terkath@terkath:~ ]
10) The host computer should now be ready to accept any SSH queries from another computer on your LAN,
by using the format: ssh <username of the host>@<IP address of the host>
As puppies run with root as "user" this looks like:
ssh root@198.162.2.7
The script should run through to the password stage, which should then open a window with user “#”
To run a CLI application (without a window), simply type in the name, – eg: ifconfig OR netstat
To check the username of your host OS, use whoami in the terminal, which should give “root”
( unless the user has been changed to spot or other )
To run a GUI application via SSH use ssh -X
eg ssh -X root@198.162.2.7
Then type the name of the application (eg: firefox) into the terminal.
Or it can be done in one line: ssh -X root@198.162.2.7 firefox
From the documentation, setting X11Forwarding to yes in the config file should allow GUI applications to run without the -X, but this may not always be the case.
Addendum:
a) Should you need to start/stop sshd in order to change the sshd_config file,
use /etc/init.d/ssh start or /etc/init.d/ssh stop respectively.
To stop and then restart ( eg after a config file edit) use /etc/init.d/ssh restart
b) In order to close the SSH session, type exit in the terminal.
Closing the active terminal window will close the SSH session,
although Openssh-Server is still running in the background,
which can be checked with netstat -anplt | grep :22 on the server device.
c) The documentation suggests that the firewall in the host device may need to be configured to allow SSH, although this may not be an issue in practice.
d) To add the public keys to another device, use this command on the client computer:
eg for rsa key: ssh-copy-id -i ~/.ssh/id_rsa.pub username@<IP Address>
For more details, see reference #1.
e) To use the terminal for other operations or applications, use “&” on the end of the command.
Eg firefox & will run firefox in the background ( if installed!) while the same terminal is used for other operations.
This means one can run a variety of remote applications at one time.
Clicking the go-away box on any application should not close the SSH connection.
f) To run an application but terminate the SSH connection when the application is terminated,
use: ssh -f -T -X root@198.162.2.7 <application_name>
References
#1 https://www.thegeekstuff.com/2008/11/3-steps-to-perform-ssh-login-without-password-using-ssh-keygen-ssh-copy-id
#2 The Hackers Manual 2018 P158ff
#3 SSH Manuals: https://www.openssh.com/manual.html
https://linux.die.net/man/1/ssh
#4 SSHD Config file: https://github.com/openssh/openssh-portable/blob/master/sshd_config
#5 https://stackoverflow.com/questions/2419412/ssh-connection-stop-at-debug1-ssh2-msg-kexinit-sent
#6 https://unix.stackexchange.com/questions/162975/how-to-start-sshd-on-puppy-linux
Other Configuration File References
https://www.systutorials.com/docs/linux/man/5-sshd_config/
ftp://ftp.iitb.ac.in/LDP/en/solrhe/chap15sec122.html
https://serversforhackers.com/c/configuring-sshd-on-the-server
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/s1-ssh-configuration
https://www.digitalocean.com/community/tutorials/how-to-tune-your-ssh-daemon-configuration-on-a-linux-vps
- Compiling
-
This is a good section to discuss how to compile software. Compiling is not everyone's cup of tea but the more people that can manage it, the longer life Puppy will have.
The hardest part of compiling is the build recipe as there are so many options. Let's include some proven recipes here.
You must have the devx loaded as this is where most of your compiling tools reside. In some cases you may also need to have the kernel sources loaded.
- n2n-edge (P2P VPN)
-
Written by smokey01
n2n is a layer-two peer-to-peer virtual private network (VPN) which allows users to exploit features typical of P2P applications at network instead of application level. This means that users can gain native IP visibility (e.g. two PCs belonging to the same n2n network can ping each other) and be reachable with the same network IP address regardless of the network where they currently belong. In a nutshell, as OpenVPN moved SSL from application (e.g. used to implement the https protocol) to network protocol, n2n moves P2P from application to network level.
Read more about it here.
Download the source code here: https://github.com/ntop/n2n/archive/dev.zip
Place the n2n-dev.zip into a working directory and extract it.
Enter the n2n-dev working directory and open a terminal.
Type: ./autogen.sh
When finished type: ./configure --prefix=/usr
if you are using a computer that is 64bit and has a /usr/lib64 directory, you could type:
./configure --prefix=/usr --libdir=/usr/lib64
When finished type: make
If you want to strip the binary, type: strip --strip-unneeded edge
For this binary to work with Back Seat Driver you need to rename it to n2n-edge or make a symlink to it.
To install this package type: make install.
You don't really need to install the entire package as you only need the binary called n2n-edge which needs to be placed into one of your bins.
EG: /usr/local/bin
If you intend running your own supernode then you need to keep the supernode binary and place it on your server on the internet.
Hint: To make a package such as a .pet or .txz, install it to a directory like this:
make DESTDIR=/root/edge-2.5.0-x86_64 install
This will create the directory structure in /root so you can then run dir2pet edge-2.5.0-x86_64 and make a .pet package.
To test the binary you can do a couple of things:
1. In a terminal type n2n-edge and you should get something like this:
# n2n-edge
Welcome to n2n v.2.5.0 for x86_64-unknown-linux-gnu
Built on Nov 26 2018 15:49:38
Copyright 2007-18 - ntop.org and contributors
edge <config file> (see edge.conf)
or
edge -d <tun device> -a [static:|dhcp:]<tun IP address> -c <community> [-k <encrypt key> | -K <key file>]
[-s <netmask>] [-u <uid> -g <gid>][-f][-m <MAC address>] -l <supernode host:port>
[-p <local port>] [-M <mtu>] [-r] [-E] [-v] [-t <mgmt port>] [-b] [-h]
-d <tun device> | tun device name
-a <mode:address> | Set interface address. For DHCP use '-r -a dhcp:0.0.0.0'
-c <community> | n2n community name the edge belongs to.
-k <encrypt key> | Encryption key (ASCII) - also N2N_KEY=<encrypt key>. Not with -K.
-K <key file> | Specify a key schedule file to load. Not with -k.
-s <netmask> | Edge interface netmask in dotted decimal notation (255.255.255.0).
-l <supernode host:port> | Supernode IP:port
-b | Periodically resolve supernode IP
| (when supernodes are running on dynamic IPs)
-p <local port> | Fixed local UDP port.
-u <UID> | User ID (numeric) to use when privileges are dropped.
-g <GID> | Group ID (numeric) to use when privileges are dropped.
-f | Do not fork and run as a daemon; rather run in foreground.
-m <MAC address> | Fix MAC address for the TAP interface (otherwise it may be random)
| eg. -m 01:02:03:04:05:06
-M <mtu> | Specify n2n MTU of edge interface (default 1400).
-r | Enable packet forwarding through n2n community.
-E | Accept multicast MAC addresses (default=drop).
-v | Make more verbose. Repeat as required.
-t <port> | Management UDP Port (for multiple edges on a machine).
Environment variables:
N2N_KEY | Encryption key (ASCII). Not with -K or -k.
#
You can also check for missing dependencies like this.
ldd /path/to/n2n-edge
# ldd n2n-edge
linux-vdso.so.1 (0x00007ffe80b43000)
libcrypto.so.1.1 => /usr/lib64/libcrypto.so.1.1 (0x00007fa653858000)
libc.so.6 => /lib64/libc.so.6 (0x00007fa653498000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fa653290000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa653070000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa653cf8000)
#
You normally only need to run the ldd command if it didn't run.
- pv (Pipe Viewer)
-
Written by smokey01
pv - Pipe Viewer - is a terminal-based tool for monitoring the progress of data through a pipeline. It can be inserted into any normal pipeline between two processes to give a visual indication of how quickly data is passing through, how long it has taken, how near to completion it is, and an estimate of how long it will be until completion.
The easiest way to determine whether you have pv installed is to open a terminal and type: pv
If you have it, you should see something like this:
If you don't have it, then you need to download the source and compile it or install it from your repo.
Website: http://www.ivarch.com/programs/pv.shtml
Download Source: http://www.ivarch.com/programs/sources/pv-1.6.6.tar.bz2
Once you have the source, extract it to a working directory/folder.
You should see the following folder: pv-1.6.6
Enter the folder and open a terminal in that folder.
Now type: ./configure --prefix=/usr
When configure has finished, type: make
After a few seconds you should have new binary called pv.
If you wish, you can strip it to make it a little smaller, like this:
strip --strip-unneeded pv
To install the pv binary type: make install or simply copy it to one of your bins.
I normally place stuff I have made in /usr/local/bin
That's it.
- ncat
-
Written by smokey01
Ncat is part of a larger package called nmap.
This is the nmap website: https://nmap.org/
Download the Source: https://nmap.org/dist/nmap-7.70.tar.bz2
Extract the nmap source code to a working directory.
Enter the nmap-7.70 folder and open a terminal.
Type: ./configure --prefix=/usr --libdir=/usr/lib64
At this point you could just type: make then make install to install the entire nmap package. For bsdriver you only need the ncat binary so lets take the easy way out and just compile ncat.
Enter the ncat folder and type: make
You should have a ncat binary in the ncat folder.
Type: strip --strip-unneeded ncat to reduce it's size.
Now place the ncat binary in one of your bins EG: /usr/local/bin
Job done.
- x11vnc
-
Most distributions come with x11vnc installed. If not then it's usually available in the repository.
You can grab the source here, if you need it: http://x11vnc.sourceforge.net/dev/x11vnc-0.9.14-dev.tar.gz
- ssvncviewer
-
Most distributions come with ssvnc installed. If not then it's usually available in the repository.
You can grab the source here, if you need it: http://ssvnc.sourceforge.net/dev/ssvnc-1.0.30.src.tar.gz
- Scripts & Code
-
bsdriver - A remote desktop utility.
- Back Seat Driver
-
Written by smokey01
Back Seat Driver is a simple GUI written in gtkdialog to facilitate remote desktop operations.
Although this was written in fatdog64 for fatdog64, it should work in other Puppy Linux distributions, providing the required dependencies are installed. Most Pups should have Xdialog and gtkdialog. The other five main dependencies are x11vnc, ssvncviewer, n2n-edge, ncat and pv. N2n-edge is also know as just edge. If you compile your own edge it will likely make a binary named edge, not n2n-edge. This being the case, to make the GUI work you will need to edit the code or create a symlink to edge called n2n-edge. You could also rename the binary from edge to n2n-edge.
Most Puppy Linux distributions have many great utilities that the average user will probably never discover. Some already have Remote Desktop utilities that work quite well. I wrote this GUI with simplicity in mind. Many people who use Linux like to fiddle and are quite skillful however, newcomers do require some help and this type of utility makes it easy.
The user can sit back and watch his/her computer screen while someone else remotely takes control and shows him/her how to do business. To improve the experience you need to have voice communications as well as visual. Normally a telephone will suffice but if the person is overseas then the call costs may become expensive if you're not using Voice Over Internet Protocol (VOIP). Many Pups come with Psip aka known as Puppy Phone. This can also be used via the edge P2P VPN to protect your privacy.
NEVER GIVE CONTROL OF YOUR COMPUTER TO ANYONE YOU DON'T KNOW OR TRUST.
By default the GUI is a single row of buttons with a title and menu bar. This design minimizes the real estate and keeps things simple.
Each button has a tool-tip but the button names should be intuitive, however, for those who disagree I will explain.
The Config button will expand the GUI so you can change the application parameters. The defaults should work fine unless there are many people trying to use this application at the same time. If this is the case simply change the community-name and password. Make sure the helper and helpee are using the same community-name and password or you won't be able to connect. The other parameters should be fine as they are. Click the Config button again to collapse the GUI.
About provides a little information about the application, credits and licence.
Help provides some basic information on how to drive the application.
The Server button is for the helpee, in other words the person who requires help. This allows the helper to connect to the helpee.
The Client button is used by the helper.
Quit closes the application. The helper or helpee can quit at anytime.
Either party can send a file or folder of files to the other. The receiving party clicks on Menu Item File Transfers, then Receive File First. A small terminal will open waiting for the other party to send the file. The sender clicks on File Transfers and ticks the check box Send File. This will expand the GUI to look this this:
Simply drag and drop a file or folder into the white space and click the Send Button.
This is what the GUI looks like when the Config button is pressed.
Clicking the Config button again will collapse the GUI.
Click the floppy disk to set a default download folder for file transfers.
Below is the code. Copy it into a text editor, save it as bsdriver then make the file executable.
# -------------------------------------------- Start here -----------------------------------------
#!/bin/bash
# smokey01 CatDude jamesbond step 22.11.2018 22:49:31
# Version 2.0 Release 1
# Usage: bsdriver [ Options ]
# Options:
# -d --dump
# -c --config /path/to/config-file
# Version 2 send & receieve files
APPVERSION=2.0
APPNAME=bsdriver
export CONFIG=$HOME/.config/$APPNAME.conf # also given via -c --config
# Localisation settings.
export TEXTDOMAIN=fatdog OUTPUT_CHARSET=UTF-8
. gettext.sh # for eval_gettext
export -f eval_gettext
# All temp files go here - it's auto-deleted on exit.
export TMPD="/tmp/$APPNAME-$USER-$$"
mkdir -p "$TMPD" && chmod 700 "$TMPD" || exit 1
# What happens on exit.
trap handle_trap 0 TERM QUIT
handle_trap () {
if [ -r "$TMPD/n2npid" ]; then
read n2npid < "$TMPD/n2npid"
kill $n2npid 2>/dev/null
fi
rm -rf "$TMPD"
}
# Are all required dependencies installed?
for p in x11vnc:x11vnc ssvncviewer:ssvnc n2n-edge:n2n-v1; do
if ! type ${p%:*} >/dev/null 2>&1
then Xdialog --title "$(gettext "Error")" --infobox "$(BINARY=${p%:*} eval_gettext "Program '\$BINARY' does not exist.")\n\n$(gettext "This application will not work without it.")\n\n$(PACKAGE=${p#*:} eval_gettext "Install package '\$PACKAGE' from your Package Manager.")" 0 0 10000; fi
done
# Are all suggested dependencies installed?
for p in pv:pv ncat:nmap; do
if ! type ${p%:*} >/dev/null 2>&1
then Xdialog --title "$(gettext "Warning")" --infobox "$(BINARY=${p%:*} eval_gettext "Program '\$BINARY' does not exist.")\n\n$(gettext "You will not be able to send/receive files without it.")\n\n$(PACKAGE=${p#*:} eval_gettext "Install package '\$PACKAGE' from your Package Manager.")" 0 0 10000; fi
done
# Parse options.
unset OPT_d
while [ "$1" ]; do
case $1 in
-c | --config) CONFIG=$2; shift 2 ;;
-d | --dump) OPT_d=1; shift ;;
* ) break ;;
esac
done
# Read configuration.
if [ ! -f "$CONFIG" ]; then
cat <<- EOF > "$CONFIG"
SUPERNODE=bytemark.leggewie.org
PORT=1234
NAME=community-name
PASSWORD=encrypted-password
SERVERIP=192.168.6.1
CLIENTIP=192.168.6.2
DESKPORT=39022
SAVEDIR=$HOME
EOF
fi
. "$CONFIG"
[ -z $GTKDIALOG ] && GTKDIALOG=gtkdialog
about () {
DIALOG='
<window title="'$(gettext "About - Back Seat Driver")'" resizable="true" icon-name="gtk-about" window-position="3">
<vbox space-expand="true" space-fill="true">
<notebook labels="'$(gettext "Information|Credits|Licence")'">
<vbox>
<text scrollable="true">
<label>"'$(gettext "
This Graphical User Interface was developed to simplify Remote Desktop operations.
There are many other tools available but they can be difficult to setup. They are usually big, slow, proprietary and often not free.
This application was developed for Fatdog64 and all the dependency applications are therefore available.
These include n2n-edge, x11vnc and ssvncviewer.
n2n-edge is a peer-to-peer Virtual Private Network application. This removes the need for any port forwarding and firewall configuration.
It also increases the security as all transmitted data is encrypted.
x11vnc is a server application and ssvncviewer is a client that connects to the server.
")'"</label></text>
</vbox>
<vbox>
<text justify="2">
<label>"'$(AUTHORS=$'smokey\nCatDude\njamesbond\nstep' VERSION=$APPVERSION eval_gettext "
This application was written by:
\$AUTHORS
Back Seat Driver Version \$VERSION
")'" </label>
</text>
<pixmap><input file>/usr/share/midi-icons/network48.png</input><height>48</height><width>48</width></pixmap>
<text justify="2"><label>"'$(VERSION_DATE="22 November 2018" ADDRESS="smokey01@smokey01.com" eval_gettext "
\$VERSION_DATE
If you use it and like it, let us know.
Email: \$ADDRESS")'"</label> </text>
</vbox>
<vbox>
<text><label>"'$(gettext "
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You can obtain more information regarding the GNU General Public License at https://www.gnu.org/licenses/
")'"</label></text>
</vbox>
</notebook>
<hbox>
<button ok></button>
</hbox>
</vbox>
<variable>DIALOG</variable>
</window>
'
export DIALOG
eval $(gtkdialog -p DIALOG -c)
}
export -f about
# space-expand="true" space-fill="true"
help () {
set -- $(gettext "help-window-width 450 help-window-height 400")
HELP_WIN_WIDTH=${2:-450} HELP_WIN_HEIGHT=${4:-400}
DIALOG='
<window title="'$(gettext "Back Seat Driver")'" resizable="true" icon-name="gtk-help" window-position="3">
<vbox>
<vbox width="'$HELP_WIN_WIDTH'" height="'$HELP_WIN_HEIGHT'" scrollable="true">
<text justify="0"><label>" '$(eval_gettext "
Back Seat Driver was designed with simplicity in mind.
If you need help, click on the Server button.
To provide help click the Client button.
This will allow the helper to see your desktop and take total control of it.
Back Seat Driver should work with the default settings. Click the Config button to amend the default settings. This has been provided to provide some flexibility.
To collapse the configuration panel, click on the Config button again.
To close the application click on the Quit button.
You can also send files or folders of files back and forth. The receiver must select Receive Files from the Menu Item File Transfers first. Then the sender can check the Send File check box under Menu Item File Transfers. A panel will open where you can drag and drop files or folders. Click the Send Button to send the files.
The files or folders will be saved alongside the bsdriver script if you don't set a location for your transfered files.
Click on the Config button. At the bottom of the GUI click on the floppy disk icon and select your desired location to save your files. When you quit the application this setting will be saved in the config file so you don't have to repeat this step.
Note: If you mess up the default settings just remove file \$CONFIG and they will be restored.
Restart the application for the default settings to take effect.
")'
"
</label> </text>
</vbox>
<hbox>
<button ok></button>
</hbox>
</vbox>
<variable>DIALOG</variable>
</window>
'
export DIALOG
eval $(gtkdialog -p DIALOG -c)
}
export -f help
server () {
touch $TMPD/iamserver
modprobe tun
Xdialog --title "$(gettext "Back Seat Driver")" --infobox " $(DEPENDS_ON="n2n-edge\nx11vnc\nssvncviewer\npv\nncat" eval_gettext "This application uses:\n\n\$DEPENDS_ON\n\nWhen this message closes the \nother person can connect.\n\nSit down, relax and enjoy the ride.") " 0 0 10000 &
urxvt -g 108x20+0+0 --title "$(gettext "Server") $SERVERIP:$DESKPORT" -e \
n2n-edge -d help -M 1000 -a "$SERVERIP" -c "$NAME" -k "$PASSWORD" -l "$SUPERNODE":"$PORT" & echo $! > "$TMPD/n2npid"
sleep 5
nice -n -10 x11vnc -rfbport "$DESKPORT"
}
export -f server
client () {
modprobe tun
sleep 2
urxvt -g 108x20+0+0 --title "$(gettext "Client") $CLIENTIP" -e \
n2n-edge -d help -M 1000 -a "$CLIENTIP" -c "$NAME" -k "$PASSWORD" -l "$SUPERNODE":"$PORT" & echo $! > "$TMPD/n2npid"
sleep 5
nice -n -10 ssvncviewer "$SERVERIP"::"$DESKPORT"
}
export -f client
killmine () {
pkill -f "x11vnc.*-rfbport.*"
pkill -f "ssvncviewer.*$SERVERIP::$DESKPORT.*"
}
export -f killmine
print_config () {
echo "SUPERNODE='$SUPERNODE'
PORT='$PORT'
NAME='$NAME'
PASSWORD='$PASSWORD'
SERVERIP='$SERVERIP'
CLIENTIP='$CLIENTIP'
DESKPORT='$DESKPORT'
SAVEDIR='$SAVEDIR'
"
}
export -f print_config
send_file () {
if [ ! -f $TMPD/n2npid ]; then
Xdialog --title "$(gettext "Stop")" --infobox "$(gettext "You need to connect with your party ")\n\n$(gettext "before you can send/receive files.")" 0 0 10000
return
fi
if ! [ "$SOURCEFOLDER" ]; then
Xdialog --title "$(gettext "Stop")" --infobox "$(gettext "You did not specify a file/directory to send")" 0 0 10000
return
fi
set -- $(gettext "file-transfer-term-width 60 file-transfer-term-height 6")
TERM_WIDTH=${2:-60} TERM_HEIGHT=${4:-6}
BASENAME=$(basename "$SOURCEFOLDER")
DIRNAME=$(dirname "$SOURCEFOLDER")
if [ ! -f $TMPD/iamserver ]
then TACIP="$SERVERIP"
else TACIP="$CLIENTIP"
fi
cat > $TMPD/go.sh << EOF
echo "$(gettext 'Sending ...') $(gettex '(press Ctrl-C to abort)')"
tar -C "$DIRNAME" -cf - "$BASENAME" | pv -rb | ncat --send-only "$TACIP" "$PORT"
ok=\$?
if [ 0 = \$ok ]
then echo "$(gettext "Sent.")"
else echo "$(gettext "Failed.")"
fi
read -t 20 -p "$(gettext 'Closing window in 20 seconds, press Enter to skip ...')"
EOF
urxvt --title "$(gettext "Sending ...")" -geometry ${TERM_WIDTH}x${TERM_HEIGHT} -e sh $TMPD/go.sh
}
export -f send_file
receive_file () {
if [ ! -f $TMPD/n2npid ]; then
Xdialog --title "$(gettext "Stop")" --infobox "$(gettext "You need to connect with your party ")\n\n$(gettext "before you can send/receive files.")" 0 0 10000
return
fi
set -- $(gettext "file-transfer-term-width 60 file-transfer-term-height 6")
TERM_WIDTH=${2:-60} TERM_HEIGHT=${4:-6}
if [ -f $TMPD/iamserver ]
then TACIP="$SERVERIP"
else TACIP="$CLIENTIP"
fi
# I've made the server the receiver
cat > $TMPD/go.sh << EOF
echo $(gettext 'Receiving ...')
ncat -l "$TACIP" "$PORT" | pv -rb | tar -C "$SAVEDIR" -xf -
ok=\$?
if [ 0 = \$ok ]
then echo "$(gettext "Received.")"
else echo "$(gettext "Failed.")"
fi
read -t 20 -p "$(gettext 'Closing window in 20 seconds, press Enter to skip ...')"
EOF
urxvt --title "$(gettext "Receiving ...")" -geometry ${TERM_WIDTH}x${TERM_HEIGHT} -e sh $TMPD/go.sh
}
export -f receive_file
set -- $(gettext "main-window-width 500 toolbar-button-width 100 send-window-button-width 70 config-panel-label-width 50 config-entry-col1-width 88 config-entry-col2-width 50")
MAIN_WIN_WIDTH=${2:-400} TOOLBAR_BTN_WIDTH=${4:-100} SEND_BTN_WIDTH=${6:-70} CONFIG_LBL_WIDTH=${8:-50} CONFIG_ENTRY_COL1_WIDTH=${10:-88} CONFIG_ENTRY_COL2_WIDTH=${10:-50}
MAIN_DIALOG='
<window title="'$(VERSION=$APPVERSION eval_gettext "Back Seat Driver - Version \$VERSION")'" width-request="'$MAIN_WIN_WIDTH'" icon-name="gtk-network" window-position="1" resizable="false">
<vbox>
<menubar>
<menu stock-id="gtk-file" label="'$(gettext "File")'">
<menuitem stock-id="gtk-quit">
<action>exit:Quit</action>
</menuitem>
</menu>
<menu stock-id="gtk-info" label="'$(gettext "Information")'">
<menuitem stock-id="gtk-help">
<action>help &</action>
</menuitem>
<menuitem stock-id="gtk-about">
<action>about &</action>
</menuitem>
</menu>
<menu stock-id="gtk-refresh" label="'$(gettext "File Transfers")'">
<menuitem checkbox="false" label="'$(gettext "Send File")'">
<action>if true show:HALFMONTY</action>
<action>if false hide:HALFMONTY</action>
</menuitem>
<menuitem stock-id="gtk-go-down" label="'$(gettext "Receive File")'">
<action>receive_file &</action>
</menuitem>
<menuitem stock-id="gtk-floppy" label="'$(gettext "Saved Files")'">
<action>rox "$SAVEDIR"</action>
</menuitem>
</menu>
</menubar>
<hbox homogeneous="true">
<togglebutton tooltip-text=" '$(gettext "Change the default configuration.")' " width-request="'$TOOLBAR_BTN_WIDTH'">
<default>false</default>
<label>"'$(gettext "Config")'"</label>
<input file stock="gtk-preferences"></input>
<action>if true show:FULLMONTY</action>
<action>if false hide:FULLMONTY</action>
</togglebutton>
<button tooltip-text=" '$(gettext "The person who needs help starts the Server.")' " width-request="'$TOOLBAR_BTN_WIDTH'">
<label>"'$(gettext "Server")'"</label>
<input file stock="gtk-network"></input>
<action>server &</action>
</button>
<button tooltip-text=" '$(gettext "The computer guru starts the Client.")' " width-request="'$TOOLBAR_BTN_WIDTH'">
<label>"'$(gettext "Client")'"</label>
<input file stock="gtk-fullscreen"></input>
<action>client &</action>
</button>
<button tooltip-text=" '$(gettext "Save configuration and close the application.")' " width-request="'$TOOLBAR_BTN_WIDTH'">
<label>"'$(gettext "Quit")'"</label>
<input file stock="gtk-quit"></input>
<action>print_config > "'"$CONFIG"'"</action>
<action>killmine</action>
<action>EXIT:0</action>
</button>
</hbox>
<vbox visible="false">
<frame '$(gettext 'Sending Details')'>
<hbox>
<text><label>'$(gettext 'File/Dir:')'</label></text>
<entry accept="file" tooltip-text=" '$(gettext "Drop a File or Directory here or click the Open button...")' ">
<variable>SOURCEFOLDER</variable>
</entry>
<button width-request="'$SEND_BTN_WIDTH'" tooltip-text=" '$(gettext "Clears the File/Dir field...")' ">
<label>'$(gettext 'Clear')'</label>
<input file stock="gtk-clear"></input>
<action>Clear:SOURCEFOLDER</action>
</button>
<button width-request="'$SEND_BTN_WIDTH'" tooltip-text=" '$(gettext "Choose a File or Folder to Send...")' ">
<label>'$(gettext 'Open')'</label>
<input file stock="gtk-open"></input>
<action type="fileselect">SOURCEFOLDER</action>
</button>
<button width-request="'$SEND_BTN_WIDTH'" tooltip-text=" '$(gettext "Send the Files or Directories...")' ">
<label>'$(gettext 'Send')'</label>
<input file stock="gtk-ok"></input>
<action>send_file &</action>
</button>
</hbox>
</frame>
<variable>HALFMONTY</variable>
</vbox>
<vbox visible="false">
<text use-markup="true">
<label>"<b><span bgcolor='"'yellow'"'> '$(gettext "Changing configuration requires restart")' </span></b>"</label>
</text>
<frame '"$(gettext 'Virtual Private Network Configuration')"'>
<hbox>
<text width-request="'$CONFIG_LBL_WIDTH'"><label>"'$(gettext "URL:")'"</label></text>
<entry tooltip-text=" '"$(gettext "This is the URL of the Supernode.")"' " width-request="'$CONFIG_ENTRY_COL1_WIDTH'">
<default>"'"$SUPERNODE"'"</default>
<variable>SUPERNODE</variable>
</entry>
<text width-request="'$CONFIG_LBL_WIDTH'"><label>"'$(gettext "Port:")'"</label></text>
<entry tooltip-text=" '"$(gettext "This is the port the Supernode is listening on.")"' " width-request="'$CONFIG_ENTRY_COL2_WIDTH'">
<default>"'"$PORT"'"</default>
<variable>PORT</variable>
</entry>
</hbox>
<hbox>
<text width-request="'$CONFIG_LBL_WIDTH'"><label>"'$(gettext "Name:")'"</label></text>
<entry tooltip-text=" '"$(gettext "Community Name can be anything you like.")"' " width-request="'$CONFIG_ENTRY_COL1_WIDTH'">
<default>"'"$NAME"'"</default>
<variable>NAME</variable>
</entry>
<text width-request="'$CONFIG_LBL_WIDTH'"><label>"'$(gettext "Pass:")'"</label></text>
<entry tooltip-text=" '$(gettext "You may choose your own password but remember the Server and Client must use the same credentials.")' " width-request="'$CONFIG_ENTRY_COL2_WIDTH'">
<default>"'"$PASSWORD"'"</default>
<variable>PASSWORD</variable>
</entry>
</hbox>
<hbox>
<text width-request="'$CONFIG_LBL_WIDTH'"><label>"'$(gettext "Server:")'"</label></text>
<entry tooltip-text=" '$(gettext "Server and Client IP must be different and in the same range EG:192.168.100.1/100.")' " width-request="'$CONFIG_ENTRY_COL1_WIDTH'">
<default>"'"$SERVERIP"'"</default>
<variable>SERVERIP</variable>
</entry>
<text width-request="'$CONFIG_LBL_WIDTH'"><label>"'$(gettext "Client:")'"</label></text>
<entry tooltip-text=" '$(gettext "Server and Client IP must be different and in the same range EG:192.168.100.1/100.")' " width-request="'$CONFIG_ENTRY_COL2_WIDTH'">
<default>"'"$CLIENTIP"'"</default>
<variable>CLIENTIP</variable>
</entry>
</hbox>
</frame>
<frame '$(gettext 'Remote Desktop Configuration')'>
<hbox>
<text width-request="'$CONFIG_LBL_WIDTH'"><label>"'$(gettext "Port:")'"</label></text>
<entry tooltip-text=" '$(gettext "You may choose any port not in use.")' " width-request="'$CONFIG_ENTRY_COL1_WIDTH'">
<default>"'$DESKPORT'"</default>
<variable>DESKPORT</variable>
</entry>
<text width-request="'$CONFIG_LBL_WIDTH'"><label>"'$(gettext "Desk:")'"</label></text>
<entry sensitive="false" tooltip-text=" '$(gettext "This needs to be the same as the VPN Server.")' " width-request="'$CONFIG_ENTRY_COL2_WIDTH'">
<default>"'"$SERVERIP"'"</default>
<variable>DESKIP</variable>
</entry>
</hbox>
</frame>
<frame '$(gettext 'Location to save Files')'>
<text use-markup="true">
<label>"<b><span bgcolor='"'yellow'"'> '$(gettext "Existing files will be overwritten")' </span></b>"</label>
</text>
<hbox>
<entry secondary-icon-stock="gtk-floppy" activates_default="true" editable="false" fs-title="'$(gettext "Select an existing folder")'" fs-action="folder">
<default>"'"$SAVEDIR"'"</default>
<variable>SAVEDIR</variable>
<action signal="button-press-event">fileselect:SAVEDIR</action>
</entry>
<button>
<label>'$(gettext 'Open')'</label>
<input file stock="gtk-open"></input>
<action>rox "$SAVEDIR"</action>
</button>
</hbox>
</frame>
<variable>FULLMONTY</variable>
</vbox>
</vbox>
</window>
'
export MAIN_DIALOG
if [ "$OPT_d" ]
then echo "$MAIN_DIALOG"
else $GTKDIALOG --program=MAIN_DIALOG
fi
# ------------------------------------------------- End here ---------------------------------------------
- Tips & Tricks
-
Tips & Tricks are simple little actions you can take to make your life easier when using Puppy. You will probably know most of the tips but there are always new users that don't.
Remove Grub4dos bootloader default Windows entry - Bigpup.
- Remove Grub4dos bootloader default Windows entry
-
Written by Bigpup
Grub4dos Config will auto make a Windows entry in the menu.lst.
By default it is setup to make a Windows entry.
If Windows entry is not needed.
Example:
Windows is not on this computer.
This can be easily changed, by editing the settings, when you run Grub4dos Config.
When Running Grub4dos Config you will get to a Window that shows all the operating systems it finds.
One of those entries will say Windows.
Delete that entry.
Continue to complete Grub4dos Config.
Now the Grub4dos boot menu will have no entry for Windows.
- Entertainment
-
The December crossword by greengeek.
- Crossword
-
Puppy Crossword (December 2018)
(Formatted by greengeek using the "Puzzlefast" website)
"Unsorted"
This months clues are numeric.
They represent the ID number of posts that puppians have made within the "UNSORTED" subgroup of the "Addditional Software" section of the Murga forum. There are plenty of posts in that subforum that can whet the appetite for new utilities.
There are some cool topics in there so maybe some of you may find something of interest.
Use the number in each clue as the gateway to some interesting posts and topics (some probably long forgotten).
"Your task Mr Phelps - should you decide to accept it - is to update these utilities and bring them into the 20th century.
This webpage will self destruct in 5 seconds......."
(See pictorial clues below image)
Hint: None of the clues or answers have anything to do with christmas (sorry!)
But happy christmas anyway!
Scroll further down for answers:
- Useful Links
-
Puppy Linux Forums USA
Ibiblio repository USA
nluug repository Netherlands
Internode repository Australia
University of Crete repository Greece
aarnet repository Australia
Internet archive repository USA
Puppy Linux Tips by smokey01
Puppy Linux wikka Puppy sites
Bookmarkos provided by kerl
Search the Puppy Linux Forums
Barry Kauler's News Blog
labbe5 Report
https://www.opendesktop.org
Puppy Linux Icon Sets
http://lxer.com/
https://distrowatch.com/
https://www.linux-apps.com/
SecurityBaron.com
- Contributors this month
-
Not all of the people below have physically given me the information to publish. If I find information I will give the credit where it is due. So if you see your name on the list below please don't be alarmed or upset. You are receiving the credit you deserve.
smokey01
666philb
jamesbond
Kirk
step
SFR
Bigpup
Terry Schuster
don570
greengeek
Proof reading - russoodle
- Newsletter Information
-
Display tip:
To improve the Notecase display format please press F7 then:
- Tick the "Restore last position/size" checkbox.
- Select the "Display" tab and tick "Wrap text".
Newsletter index written by 6502coder can be found here:
http://www.murga-linux.com/puppy/viewtopic.php?p=945962#945962
Contributions
If you have information you would like to see in the newsletter please email it to smokey01 at smokey01@internode.on.net. I prefer it to be created in Notecase otherwise it makes my job a bit more difficult. I don't intend doing any significant editing but I will attempt to read all of the articles and ask a couple of others to do some proof reading. If you would like to assist in proof reading please let me know on the email address above.
Notecase is very easy to learn and use. Try and keep your articles to less than 1000 words. Photos and images should be no bigger than 1024 x 768. I can always make them smaller.
The deadline for articles is the 20th of each month. Let's not worry about time zones. I know it may be the 20th in Australia and only the 19th in the USA but I can live with this. If it's more than 24 hours late with respect to Australian CST then your article may be pushed right, into the next edition. I expect proof reading to take less than a week which will provide about four days to publish at the beginning of each month.
I will upload the Newsletter to my site at http://smokey01.com/newsletters. There will be two versions. One will be an xz compressed Notecase file and the other will be a html file so it can be read in a browser.
I have changed the original naming convention to 0001-PuppyLinuxNewsletter-Jan2017.ncd.xz and 0001-PuppyLinuxNewsletter-Jan2017.html respectively. The formatting of the html is not brilliant but readable. The newsletter is intended to be downloaded and read in Notecase.
Disclaimer
The editor has the right to veto any articles that he/she considers inappropriate. A reasonable effort will be made to avoid spelling and grammatical errors however, I'm sure some may slip through. This newsletter is published by volunteers, and is free, so please be kind. Constructive criticism and positive suggestions are welcomed.
smokey01