Desktop Phase 1
From NetBSD Wiki
Contents |
Overview
This page lists tasks to be completed for phase 1 of the Desktop NetBSD project.
Application stack
Update: Draft version can be found as meta-pkgs/desktop-gnome, please test and comment.
In detail
Create a desktop package that installs GNOME and commonly used applications. This should be set up to provide enough for web access and basic office productivity. Contents of this package:
- Full GNOME install, including all extra GNOME-supplied packages
- Firefox
- Multimedia browser plugin (multimedia/totem-browser-plugin)
- PDF reader (print/evince)
- Multimedia player (multimedia/totem with gstreamer)
- GIMP
- gnome-screenshot, if GNOME does not include it by default
- Evolution and Thunderbird mail clients
- CUPS, or whatever is necessary to print to the average consumer inkjet
- hpijs for HP inkjets
- other printer specific tools ?
- foomatic is a horror and should be avoided if possible, but might be necessary
- CD burning application (brasero?)
- brasero is pretty good when it does not crash
- RDP client with a Gtk+ interface
- Screen savers, if not provided by GNOME
- IM client (chat/pidgin)
- BitTorrent client (net/Transmission)
- Linux compatibility packages
- WINE for WoW etc
- Stickies (PostIts) if not provided by GNOME
- bash
- sudo and gksu for gui apps which need root permissions
- an input method for exotic languages (uim?)
Useful default fonts:
- DeajaVu TTF font (fonts/dejavu-ttf)
- Gentium TTF font (fonts/gentium-ttf)
- Inconsolata TTF font (fonts/inconsolata-ttf)
Ideally the following will also be included but license and patent issues (MP3) need to be investigated on a case-by-case:
- Softphone (ekiga)
- OpenOffice
- Codecs (meta-pkgs/gstreamer0.10-plugins)
- Citrix client
- Microsoft TTF fonts
- MS font package might be nice but installing it by default might not. While it helps some it may hurt others.
- JDK
- Adobe Flash support
For network connectivity, the following should also be included. Contact jmcneill@ for more details.
- wip/dhcpcd
- wip/dhcpcd-dbus
- wip/dhcpcd-gtk (roym's GUI controller for dhcpcd+wpa_supplicant)
Rationale and general notes
Only a generic set of packages should be installed. The best install for new users is the one that asks the fewest questions: customization of the install can be done by hand once the system is running. The primary goal is to get a basic, working desktop environment on the machine with the least fuss possible. A secondary goal is to make the distribution easy to maintain.
Do not include applications that are not of general interest to most desktop users. Do not include alternate window managers or artwork/themes. Leave GNOME window behaviour as the default (MS Windows style). Broadly speaking, the target audience comes from a Windows/Linux background. Additionally, the user can customize the install to taste later.
GNOME is chosen as it is the defacto industry standard. Other environments can be installed by hand, and others can build upon the initial work and provide alternatives. The focus of this project is a GNOME desktop. NetBSD is a volunteer project and has limited resources. We can only afford to pick one default configuration and make it work very well.
Branding distribution
In detail
Create a package that applies NetBSD branding and tweaks to GNOME. This package should:
- Change the logo in the GNOME menubar to the NetBSD flag, if needed.
- Install the NetBSD GDM theme and tweak gdm config appropriately.
- Modify the X server arguments to start with a black background (-br).
- If possible it should start with cursor set to the builtin left_ptr.
- Alter the GNOME default monospace font to be Inconsolata.
- Install NetBSD GNOME/Gtk+ theme.
- Install NetBSD wallpapers.
- Set default GNOME wallpaper for all users to "graphite" from the NetBSD wallpaper collection.
- Configure nautilus to always start with --browser.
- Install NetBSD icon theme.
The branding package should depend on the desktop package.
Rationale and general notes
Strong branding and a modern, unobtrusive look that has appeal to a broad section of users is essential. The ragged, inconsistent visual presentation typically associated with X windows is no longer acceptable to the majority of those using Unix-like systems. Input from those with professional graphic design or visual marketing experience is solicited.
Combined distribution
In detail
- installs the desktop component.
- applies the branding package.
- ensures that 'sudoers' contains '%wheel ALL=(ALL) ALL'.
System installation
The default installation should be targeted at a user doing a desktop installation on a modern PC with a single large (>50GB) disk and plenty of RAM.
In detail
- Define path structure for including packages on install CD-ROMs. Note that release binaries currently live in /${MACHINE}. It may be worthwhile moving both packages and release binaries to a subdirectory on the CD-ROM such as /dist/${MACHINE}.
- Add a sysinst screen to create a regular user account, if there is not already one. This user should have primary group 'staff', and secondary groups 'wheel' and 'operator'. The user should have 'ksh' as default shell.
- ksh line editing and command line completion should be configured to operate similarly to bash. This may involve a change to the NetBSD source tree:
set -o emacs bind '^I'=complete bind '^I^I'=complete-list
- If sysinst was configured to use DHCP, ensure that the system comes up running a DHCP client.
- Investigate removing superflous prompts from sysinst, e.g. MBR partition geometry checks. These could be moved to an 'expert' mode, removed entirely, or made conditional on the age of the machine.
- Modify sysinst to ask the user whether or not to install "the desktop environment". This should only be done if X is installed and if the package repository is found to be on the CD-ROM. Later this could be expanded to a more general interface that will install collections of software -- not at package level granularity. Initially this should be a simple yes/no choice. If the user chooses to install the environment:
- 'mount -t null' package repo from CD-ROM into root FS of target
- chroot into root FS
- pkg_add combined distribution
- display some progress indicator in sysinst
- If the user has installed X windows and the server is Xorg, have sysinst configure the server automatically.
- chroot into root FS
- X -configure, trapping and reporting errors
- if display is an LCD, ensure native resolution is being used
- if not an LCD, ensure at least 1024x768 is minimum resolution
- ensure that virtual root window size matches minimum resolution
- ensure that high-colour or maximum color depth for resolution is used
- install config file into correct location
Optional tasks, not necessary for producing prototype
Determine how packages can be placed on CD-ROM for release. Negotiate this with interested parties, e.g. release engineering team and pkgsrc team. For example, this could mean including an automated and optional step in the build script for CD-ROMs that downloads packages from a configured source for inclusion in the ISO.
Rationale and general notes
Again, the best install for new users is the one that asks the fewest questions: customization of the install can be done manually after installation. The primary goal is to get a basic, working desktop environment on the machine with the least fuss possible. We can do this fairly easily. Based on an analysis of the NetBSD 5.0RC1 sysinst on i386, we could optimize for a one full disk installation with the following steps:
- default menu item: default installation
- warning, will overwrite all contents on disk
- (install from cd/dvd with progress bar)
- ask for root password
- ask for user account name and password
- give option to reboot or configure additional settings
This brings up the default installation in 3 "clicks" plus entering rootpw + username + userpw.
OS branding, x86 only
Responsible (for the technical bit): User:Jmcneill, User:Ad
Boot loader changes
- Create a NetBSD splashscreen. This should have a black background and anti-aliased NetBSD logo.
- in progress: Boot loader modifications:
- Add splash= keyword to boot.cfg. If present and console is known VGA, have boot loader set graphics mode using VBE 2.0 calls. Load splash screen from file system and display. The splash screen image is only to reside in video memory and is not preserved for the kernel. Default resolution is 640x480x8. Customization of resolution is not necessary for the prototype.
- First 16 palette entries in splash screen image must provide ANSI standard colors (rasops_cmap). This is easily achieved with tools like GIMP. Splash screen image must be in a standard, simple format, easy for the boot loader to manipulate. For example, Microsoft device independent bitmap (.bmp) with RLE compression.
- Display simple message: if user hits key within 5 sec "for additional options", clear screen and display menu. If this can be represented graphically in a clean and easy to understand manner, all the better. For example, an icon representing the "Any" key alongside other meaningful imagery (poor representation, but illustrates the concept). Remain in graphics mode when switching to menu if VBE 2.0 guarantees that text drawing continues to work, otherwise switch back to 80x25 text mode.
- As boot begins display message indicating that boot is in progress. Good if this can be done graphically and appear professional. For example: an hourglass icon, or some other icon to indicate that work is in progress.
- completed: Extend console bootinfo passed to kernel so that the kernel is aware of a preset VBE graphics mode. Pass mode number, resolution, depth physical address of frame buffer, whether splash screen is active, and any other needed parameters.
Kernel changes
- completed: replace vesafb(4) with genfb(4).
- If splash screen is present and operating in graphical mode console device is initialized in MAPPED mode (i.e. no text output). Splash image already present in video RAM. If no splash screen, device is initialized in EMUL mode (text).
- Remove much of the kernel splash screen code. Modify it to only display progress indicator. Display progress indicator, NOT a progress bar. If no aprint_* activity for N seconds, switch console out of mapped mode and back to text mode.
- Create a userspace tool (/libexec/splash or splashed - daemon) to handle splash screen. This should help in achieving number of things:
- If no X login manager is configured, or X fails to start correctly, it should switch the display back to EMUL (text) mode to allow console access via getty. Otherwise, remain passive and allow X server to take over display.
- Arrange to have this utility re-display splash screen when controlled system shutdown is initiated. It should only do this if shutdown is initiated in a controlled manner via /sbin/shutdown. Splash screen needs to be disabled if shutdown aborts (perhaps check for keyboard input OR blocked read on /dev/console; more research required).
- Arrange to have this utility called by /sbin/init if startup fails. It should switch the screen back to EMUL (text) mode.
Rationale and notes
For a professional clear appearance, everything should be as seamless as possible. The boot loader displays splash screen so no interruption by text output or video mode change is noted by the user. The splash screen background colour is black to match (a) system default after exiting BIOS and beginning boot (b) X server default when X is started.
This work is going to benefit some embedded platforms as well, as we'll be adding an image loader to libsa and the appropriate hooks in wsdisplay; think of eg. a netbooting IPTV set-top box, where you can't get away with either spewing text or displaying nothing on screen until your application is up and running (which on a diskless device can be in the order of minutes). I'm sure there are plenty more examples where this would be handy.
Base OS enhancements
- Autotune shmmaxpgs to a resonable default. Currently it is far too small.
Misc Suggestions
track and fix desktop critical bugs
Some NetBSD bugs that might be acceptable for specialized or server systems will severely hinder wide desktop acceptance.
For example, I installed a NetBSD system and then accidentally removed an USB flash drive that was still mounted which resulted in a kernel panic bringing down the whole system. While a careful user might live with such bug, and on many kinds of systems it is completely irrelevant on a typical desktop attaching and detaching USB flash drives is a common task which should not result in a kernel panic.
- Modify gnome-mount to use /sbin/rump_* when available instead of /sbin/mount for hot-pluggable devices. (which might fix the problem for gnome but not for the system) --Jmcneill 15:05, 7 February 2009 (UTC)
add essential tools into system base
While the system base is technically sufficient to install anything the user might need it is not sufficient for installing NetBSD without having another running system.
The only tool for fetching files from the network is ftp(1) which cannot fetch HTTPS web pages. There is no HTML viewer in base, but the the install guide is in HTML format. Thus user with a freshly installed system is locked out of reading NetBSD documentation, and the ports system is far from working out of the box without any setup on the user's part.
Adding a browser like lynx/links/w3m that can be used for reading documentation on the just installed system would make NetBSD much easier to set up. Also a terminal multiplexer (like tmux? or screen) for platforms with single console.
integrate font handling across the system
Historically, Unix has no system-level font handling at all, and X's historic font handling sucks, so lots of non-X or not-only-X applications that use fonts have their own font handling schemes. (E.g.: groff, tex, ghostscript...)
The base system should be revamped to provide unified installation of and access to fonts, in the same kind of way the base system provides unified installation of and access to other common shared things, like man pages or header files.
Enough applications now use fontconfig (or pango, which uses fontconfig) that whatever scheme we use should provide a fontconfig-compatible application interface. Whether the scheme we use should *be* fontconfig or something else still needs to be resolved.
Patching tex to use fontconfig or whatever other scheme is probably beyond the scope of anything we want to tackle; however, most of the rest should be feasible. Ideally whatever scheme we deploy should be general enough to be *able* to support tex...
The goal should be that every application that uses fonts can find and use any font installed on the system. Simple as that may sound, it's still a fairly long way off...
add real support for modular xorg
While xsets are fine on some platforms the PC users will often need a particular version of a X driver for their card to work. Rebuilding the X sets for testing a different driver version is not the way to go.
The modular xorg in pkgsrc can be made to work. However:
- by installing the xorg-modular or whatever package you get a broken X server that is missing quite a few pieces which you have to manually hunt among numerous packages in various groups
- the pkgsrc has to be switched to modular xorg by setting a variable but it is not checked even in the very xorg-modular package that this variable is set. Instead, pkgsrc starts building various libraries and fails with some obscure error messages.
- there are no binary packages for modular xorg
make pkgsrc usable
The pkgsrc system has several flaws that make it very hard to use:
- Its difficult to use use pkgsrc for installing both binary and source packages. It requires setting BINPKG_SITES and sticking to bin-install.
