# Cygwin-specific notes for screen

screen has been reported to work well inside the following terminals in Cygwin:

* mintty
* rxvt
* xterm

If you use screen in a DOS console, you will be able to detach sessions, but
reattaching to them later is likely to fail. Then you'll have to use `screen
-wipe` to clear out your old unusable sessions, and you may have to manually
kill their child processes.

screen may or may not work well with other terminals in Cygwin. Please post
test reports to the Cygwin mailing list.

## Color support

screen version 5 now includes both truecolor (24-bit) and 256-color terminal
support. To determine how many colors your terminal can display now, run

    /usr/share/screen/colortest.sh

Instructions at the bottom of the output will help you to determine how many
colors your terminal supports. If you want to get more colors, read on.

### Truecolor

To use truecolor, set

    truecolor on

in your ~/.screenrc. (This option is undocumented as of screen version 5.0.1.)
Then kill your screen session (`C-A \`) and start a new one. According to
https://github.com/termstandard/colors, you may also need to set one of the
following in your shell environment:

    COLORTERM=truecolor
	COLORTERM=24

### 256-color

If truecolor support won't work for you, to get 256-color support you may need
to set your terminal type to a 256-color variant, both outside and inside of
screen. A simple way to do this is by invoking screen as e.g.

    TERM=xterm-256color screen -T screen-256color

The correct value of TERM depends on your terminal type, and is believed to be
well described by

    case $TERM in
      xterm)  TERM=xterm-256color ;; # for xterm, PuTTY, MinTTY
      rxvt)   TERM=rxvt-256color  ;; # for rxvt
      cygwin) ;; # DOS terminal - fewer than 16 colors are supported
    esac

However as of screen version 5, I now get better results by leaving TERM and
term unset. The best way to find out is just to try it.

You might be able to set the above permanently in your environment, i.e. by
putting it into your .bashrc file, without any ill effects. If you know of any
additions or corrections to the above logic, please post the information to the
Cygwin mailing list.

To avoid having to specify '-T screen-256color' every time, you can put

    term screen-256color

into your .screenrc or /etc/screenrc file.


## FAT file system warning

If your /tmp directory is stored on a FAT file system, you won't be able to
reattach to screen sessions after you detach from them. The reason is that to
preserve the security of your session, screen requires that restrictive
permissions be set on the directory where it stores its socket files, in
/tmp/uscreens by default. But the FAT file system doesn't support file
permissions at all, so it's incapable of setting the permissions tightly
enough. If this is your case, then when you try to reattach to a detached
session, screen will give you the following unhelpful error message:

    There is a screen on:
    There is no screen to be resumed.

You can use the 'mount' command to see which type of file system your root
directory is stored on:

    mount | grep 'on / '

(or `mount | grep 'on /tmp '` in case you've mounted a separate file system on
/tmp). If the result says the type is fat, fat32, vfat, or some other kind of
fat, then you won't be able to reattach to screen sessions.

To solve this problem, you need to tell screen to store its socket files in a
directory on a file system that does support file permissions, such as NTFS. For
example, you could put the following in your ~/.bash_login file:

    export SCREENDIR=/cygdrive/c/WINDOWS/Temp/screen/$USER

assuming that C:/Windows/Temp/screen/$USER is an existing NTFS directory where
you have write permission. Another solution would be to mount an NTFS directory
as your /tmp directory, e.g. by putting

    C:/WINDOWS/Temp /tmp some_fs binary 0 0

into /etc/fstab or /etc/fstab.d/$USER. See mount(1).
