:lang: en
:toc:

[[cha:linux-faq]]
= Linux FAQ(((Linux FAQ)))

These are some basic Linux commands and techniques for new to Linux
users. More complete information can be found on the web or by using
the man pages.

== Automatic Login(((Automatic Login)))

=== Debian

Debian Stretch uses the Xfce desktop environment by default, with the lightDM
display manager lightDM. To get automatic login with Stretch:

* In a terminal, use the command:

----
$ /usr/sbin/lightdm --show-config
----

* Make a note of the absolute path to the configuration file lightdm.conf.
* Edit that file with a pure text editor (gedit, nano, etc), as root.
* Find and uncomment the lines:

----
#autologin-user=
#autologin-user-timeout=0
----

* Set autologin-user=your_user_name
* Save and reboot.

=== Ubuntu

When you install LinuxCNC with the Ubuntu LiveCD the default is to have to
log in each time you turn the computer on. To enable automatic login go
to 'System > Administration > Login Window'. If it is a fresh install the
Login Window might take a second or three to pop up. You will have to
have your password that you used for the install to gain access to the
Login Window Preferences window. In the Security tab check off Enable
Automatic Login and pick a user name from the list (that would be you).

== Automatic Startup

To have LinuxCNC start automatically with your config after turning on the
computer go to 'System > Preferences > Sessions > Startup Applications',
click Add. Browse to your config and select the .ini file. When the file
picker dialog closes, add linuxcnc and a space in front of the path to your .ini file.

Example:

----
linuxcnc /home/mill/linuxcnc/config/mill/mill.ini
----

The documentation refers to your respective .ini file as INI-file.

[[faq:terminal]]
== Terminal

Many things need to be done from the terminal like checking the kernel message
buffer with 'dmesg'. Ubuntu and Linux Mint have a keyboard shortcut Ctrl + Alt + t.
Debian Stretch does not have any keyboard shortcuts defined.
It can be easily created with the 'Configuration Manager'.
Most modern file managers support the right key to open a terminal just
make sure your right clicking on a blank area or a directory not a file name.
Most OS's have the terminal as a menu item, usually in Accessories.

[[faq:man-pages]]
== Man Pages(((Man Pages)))

A man page (short for manual page) is a form of software documentation
usually found on a Unix or Unix-like operating system like Linux.

To view a man page open up a terminal to find out something about the
find command in the terminal window type:

----
man find
----

Use the Page Up and Page Down keys to view the man page and the Q key
to quit viewing.

[NOTE]
Viewing the man page from the terminal may not get the expected man page.
For example if you type in man abs you will get the C abs not the LinuxCNC
abs. It is best to view the LinuxCNC man pages in the HTML documents.

== List Modules

Sometimes when troubleshooting you need to get a list of modules that
are loaded. In a terminal window type:

----
lsmod
----

If you want to send the output from lsmod to a text file in a terminal
window type:

----
lsmod > mymod.txt
----

The resulting text file will be located in the home directory if you
did not change directories when you opened up the terminal window and
it will be named mymod.txt or what ever you named it.

== Editing a Root File

When you open the file browser and you see the owner of the file is
root you must do extra steps to edit that file. Editing some root files
can have bad results. Be careful when editing root files. Generally, you
can open and view most root files, but they will open in 'read only'
mode.

=== The Command Line Way

Open a terminal and type

----
sudo gedit
----

Open the file with File > Open > Edit

=== The GUI Way

. Right click on the desktop and select Create Launcher
. Type a name in like sudo edit
. Type 'gksudo "gnome-open %u"' as the command and save the launcher to
  your desktop
. Drag a file onto your launcher to open and edit

=== Root Access

In Ubuntu you can become root by typing in "sudo -i" in a terminal
window then typing in your password. Be careful, because you can really 
foul things up as root if you don't know what you're doing. 

== Terminal Commands

=== Working Directory

To find out the path to the present working directory in the terminal
window type:

----
pwd
----

[[faq:cd]]
=== Changing Directories(((Changing Directories)))(((cd)))

To change the working directory to the one one level up, i.e., the parent directory, in the terminal window type:

----
cd ..
----

To move up two levels in the terminal window type:

----
cd ../..
----

To move directly to your home directory, in the terrminal window use the cd command with no arguments:

----
cd
----

To move down to the linuxcnc/configs subdirectory in the terminal window
type:

----
cd linuxcnc/configs
----

=== Listing files in a directory

To view a list of all the files and subdirectories in the terminal window type: 

----
dir
----

or

----
ls
----

=== Finding a File

The find command can be a bit confusing to a new Linux user. The basic
syntax is:

----
find starting-directory parameters actions
----

For example to find all the .ini files in your linuxcnc directory you
first need to use the pwd command to find out the directory.

Open a new terminal window and type:

----
pwd
----

And pwd might return the following result: 

----
/home/joe
----

With this information put the command together like this:

----
find /home/joe/linuxcnc -name \*.ini -print
----

The -name is the name of the file your looking for and the -print
tells it to print out the result to the terminal window.
The \*.ini tells find to return all files that have the .ini extension.
The backslash is needed to escape the shell meta-characters. See the find
man page for more information on find.

=== Searching for Text

----
grep -irl 'text to search for' *
----

This will find all the files that contain the 'text to search for' in the
current directory and all the subdirectories below it, while
ignoring the case. The -i is for ignore case and the -r is for
recursive (include all subdirectories in the search). The -l option will
return a list of the file names, if you leave the -l off you will also
get the text where each occurrence of the "text to search for" is found.
The * is a wild card for search all files. See the grep man page for more
information.

=== Diagnostic Messages

To view the diagnostic messages use "dmesg" from the command window. To
save the diagnostic messages to a file use the redirection operator '>', like
this:

----
dmesg > bootmsg.txt
----

The contents of this file can be copied and pasted on line to share
with people trying to help you diagnose your problem.

To clear the message buffer type this:

----
sudo dmesg -c
----

This can be helpful to do just before launching LinuxCNC, so that there will
only be a record of information related to the current launch of LinuxCNC.

To find the built in parallel port address use grep to filter the information
out of dmesg.

After boot up open a terminal and type:

----
dmesg|grep parport
----

== Convenience Items

=== Terminal Launcher

If you want to add a terminal launcher to the panel bar on top of the
screen you typically can right click on the panel at the top of the
screen and select "Add to Panel". Select Custom Application Launcher
and Add. Give it a name and put gnome-terminal in the command box.

== Hardware Problems

=== Hardware Info

To find out what hardware is connected to your motherboard in a
terminal window type:

----
lspci -v
----

=== Monitor Resolution

During installation Ubuntu attempts to detect the monitor settings. If
this fails you are left with a generic monitor with a maximum
resolution of 800x600.

Instructions for fixing this are located here:

https://help.ubuntu.com/community/FixVideoResolutionHowto[https://help.ubuntu.com/community/FixVideoResolutionHowto]

== Paths

.Relative Paths
Relative paths are based on the startup directory which is the directory
containing the INI-file.  Using relative paths can facilitate relocation of
configurations but requires a good understanding of linux path specifiers.

....
./f0        is the same as f0, e.g., a file named f0 in the startup directory
../f1       refers to a file f1 in the parent directory
../../f2    refers to a file f2 in the parent of the parent directory
../../../f3 etc.
....

// vim: set syntax=asciidoc:
