Warning, /utilities/kwalletmanager/doc/index.docbook is written in an unsupported language. File is not indexed.
0001 <?xml version="1.0" ?> 0002 <!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant V1.1//EN" "dtd/kdedbx45.dtd" [ 0003 <!ENTITY % addindex "IGNORE"> 0004 <!ENTITY % English "INCLUDE"> 0005 ]> 0006 0007 <book id="kwallet5" lang="&language;"> 0008 <bookinfo> 0009 <title>The &kwallet5; Handbook</title> 0010 0011 <authorgroup> 0012 <author> 0013 &George.Staikos; &George.Staikos.mail; 0014 </author> 0015 <author> 0016 &Lauri.Watts; &Lauri.Watts.mail; 0017 </author> 0018 <othercredit role="developer"> 0019 <firstname>George</firstname><surname>Staikos</surname> 0020 <affiliation><address>&George.Staikos.mail;</address></affiliation> 0021 <contrib>Developer</contrib> 0022 </othercredit> 0023 <!-- TRANS:ROLES_OF_TRANSLATORS --> 0024 </authorgroup> 0025 0026 <legalnotice>&FDLNotice;</legalnotice> 0027 0028 <date>2016-07-05</date> 0029 <releaseinfo>Applications 16.04</releaseinfo> 0030 0031 <abstract> 0032 <para> 0033 The wallet subsystem provides a convenient and secure way to manage all your 0034 passwords.</para> 0035 0036 </abstract> 0037 0038 <keywordset> 0039 <keyword>KDE</keyword> 0040 <keyword>Kwallet</keyword> 0041 <keyword>passwords</keyword> 0042 <keyword>forms</keyword> 0043 </keywordset> 0044 0045 </bookinfo> 0046 0047 <chapter id="introduction"> 0048 <title>Introduction</title> 0049 0050 <para>Computer users have a very large amount of data to manage, some of 0051 which is sensitive. In particular, you will typically have many passwords 0052 to manage. Remembering them is difficult and writing them down on paper or in 0053 a text file is insecure.</para> 0054 0055 <para>&kwallet5; provides a secure way to store passwords and other secret information, 0056 allowing the user to remember only a single password instead of numerous different passwords and credentials. 0057 </para> 0058 0059 <sect1 id="kwallet-create"> 0060 0061 <title>Create a Wallet</title> 0062 0063 <para>Wallet is a password storage. It is usually sufficient to have just one wallet secured by one master password but you can organize your large collection of passwords by wallets using &kwalletmanager5;.</para> 0064 0065 <para>By default a wallet named <guilabel>kdewallet</guilabel> will be used to store your passwords. 0066 This wallet is secured by your login password and will automatically be opened at login, 0067 if kwallet_pam is installed and properly configured. On certain distros (⪚ Archlinux) kwallet_pam is not installed by default</para> 0068 0069 0070 <para>Other wallets have to be opened manually.</para> 0071 0072 <para>There are two ways to create a new wallet:</para> 0073 0074 <itemizedlist> 0075 <listitem><para>Use the menu item <menuchoice><guimenu>File</guimenu><guimenuitem>New 0076 Wallet</guimenuitem></menuchoice> in the &kwalletmanager5;</para></listitem> 0077 0078 <listitem><para>Use the <guibutton>New</guibutton> button in the &systemsettings; module 0079 <guilabel>KDE Wallet</guilabel></para></listitem> 0080 </itemizedlist> 0081 0082 <para>If you have not created a wallet yet, see section <link linkend="kwallet-using">Using &kwallet5;</link>. 0083 </para> 0084 0085 <para>&kwallet5; offers two different ways to store your data:</para> 0086 0087 <screenshot> 0088 <screeninfo>Select encryption</screeninfo> 0089 <mediaobject> 0090 <imageobject><imagedata fileref="wallet-encryption-selection.png" format="PNG"/></imageobject> 0091 <textobject><phrase>Select encryption</phrase></textobject> 0092 </mediaobject> 0093 </screenshot> 0094 0095 <variablelist> 0096 0097 <varlistentry> 0098 <term>Blowfish encryption</term> 0099 <listitem> 0100 <para>&kwallet5; saves this sensitive data for you in a strongly encrypted 0101 file, accessible by all applications, and protected with a master 0102 password that you define.</para> 0103 0104 <screenshot> 0105 <screeninfo>Create a blowfish encrypted wallet</screeninfo> 0106 <mediaobject> 0107 <imageobject><imagedata fileref="first-open-request.png" format="PNG"/></imageobject> 0108 <textobject><phrase>Create a blowfish encrypted wallet</phrase></textobject> 0109 </mediaobject> 0110 </screenshot> 0111 0112 <para>The data is encrypted with the 0113 <ulink url="http://www.schneier.com/blowfish.html">Blowfish symmetric block cipher algorithm</ulink>, 0114 the algorithm key is derived from the 0115 <ulink url="http://www.ietf.org/rfc/rfc3174.txt">SHA-1 hash</ulink> 0116 of the password, with a key length of 156 bits (20 bytes). 0117 The data into the wallet file is also hashed with SHA-1 and checked 0118 before the data is deciphered and accessible by the applications. 0119 </para> 0120 </listitem> 0121 </varlistentry> 0122 0123 <varlistentry> 0124 <term>GPG encryption</term> 0125 <listitem> 0126 <para>GnuPG offers some very strong encryption algorithms and uses passphrase protected long keys.</para> 0127 0128 <screenshot> 0129 <screeninfo>No GPG key found</screeninfo> 0130 <mediaobject> 0131 <imageobject><imagedata fileref="error-nokey.png" format="PNG"/></imageobject> 0132 <textobject><phrase>No GPG key found</phrase></textobject> 0133 </mediaobject> 0134 </screenshot> 0135 <para>The screenshots above show the case where an encryption capable GPG key was not 0136 found on the system. Please use applications like &kgpg; or &kleopatra; to create a key and try again.</para> 0137 0138 <para>If a GPG key was found you will get the next dialog where you can select a key to use for your new wallet. 0139 </para> 0140 <screenshot> 0141 <screeninfo>Select an encryption key</screeninfo> 0142 <mediaobject> 0143 <imageobject><imagedata fileref="key-selection.png" format="PNG"/></imageobject> 0144 <textobject><phrase>Select an encryption key</phrase></textobject> 0145 </mediaobject> 0146 </screenshot> 0147 0148 <para>&kwallet5; will now use GPG when storing wallets and when opening them. 0149 The passphrase dialog only shows once. Even if the wallet is closed after initial open, 0150 subsequent opening will occur silently during the same session. 0151 </para> 0152 0153 <para> 0154 The same session can handle simultaneously both file formats. &kwallet5; will transparently detect 0155 the file format and load the correct backend to handle it.</para> 0156 0157 <para> 0158 To use your sensitive data from your classic wallet with the new backend follow these steps:</para> 0159 0160 <itemizedlist> 0161 <listitem><para>Create a new GPG based wallet</para></listitem> 0162 <listitem><para>Launch &kwalletmanager5; using &krunner; (<keycombo>&Alt; <keycap>F2</keycap></keycombo>) 0163 or other application launcher (menu) and select your old wallet. 0164 Then choose <menuchoice><guimenu>File</guimenu> 0165 <guimenuitem>Export as encrypted</guimenuitem></menuchoice> to create an archive file with your sensitive data. 0166 </para></listitem> 0167 <listitem><para>Select the new GPG based wallet then choose <menuchoice><guimenu>File</guimenu> 0168 <guimenuitem>Import encrypted</guimenuitem></menuchoice> and select the file you just saved.</para> 0169 </listitem> 0170 0171 <listitem><para>Go to &systemsettings; <menuchoice><guimenu>Account Details</guimenu> <guimenuitem>KDE 0172 Wallet</guimenuitem></menuchoice> and select the newly created GPG based wallet from the <guilabel>Select 0173 wallet to use as default</guilabel> combobox. 0174 </para></listitem> 0175 </itemizedlist> 0176 0177 <para>Alternatively use <guimenuitem>Import a wallet</guimenuitem> 0178 but in that case you have to select the <filename class="extension">.kwl</filename> file corresponding 0179 to your old wallet, located in the folder <filename class="directory">kwalletd</filename> 0180 in <userinput>qtpaths --paths GenericDataLocation</userinput>. 0181 </para> 0182 </listitem> 0183 </varlistentry> 0184 0185 </variablelist> 0186 0187 <tip> 0188 <para>&kwallet5; supports multiple wallets, so 0189 for the most secure operation, you should use one wallet for local 0190 passwords, and another for network passwords and form data. You can 0191 configure this behavior in the &kwallet5; &systemsettings; module, however 0192 the default setting is to store everything in one wallet named <guilabel>kdewallet</guilabel>.</para> 0193 </tip> 0194 0195 <para>A wallet is by default closed, which means that you must supply 0196 a password to open it. Once the wallet is opened, the contents can 0197 be read by any user process, so this may be a security issue.</para> 0198 </sect1> 0199 0200 <sect1 id="kwallet-using"> 0201 <title>Using &kwallet5;</title> 0202 0203 <para>If you visit ⪚ the &kde; bugtracker and enter the login data for 0204 the first time, a dialog pops up offering to store the password in an 0205 encrypted wallet:</para> 0206 0207 <screenshot> 0208 <screeninfo>Request to save login information</screeninfo> 0209 <mediaobject> 0210 <imageobject><imagedata fileref="save-login-information.png" format="PNG"/></imageobject> 0211 <textobject><phrase>Request to save login information</phrase></textobject> 0212 </mediaobject> 0213 </screenshot> 0214 0215 <para>If you want to store this information, select <guibutton>Store</guibutton> 0216 to proceed. In case you did not create a wallet so far, the next dialog asks for 0217 the encryption backend and creates a wallet named kdewallet. 0218 </para> 0219 0220 <para>Next time you visit the same website again, the application retrieves the login data 0221 from an open wallet and prefills the forms with these secrets.</para> 0222 0223 <screenshot> 0224 <screeninfo>Prefilled login information</screeninfo> 0225 <mediaobject> 0226 <imageobject><imagedata fileref="prefilled-forms.png" format="PNG"/></imageobject> 0227 <textobject><phrase>Prefilled login information</phrase></textobject> 0228 </mediaobject> 0229 </screenshot> 0230 0231 <para>If the wallet is closed the application requests to open the wallet. 0232 Enter the wallet password and click the <guibutton>Open</guibutton> button.</para> 0233 0234 <screenshot> 0235 <screeninfo>Request to open a wallet</screeninfo> 0236 <mediaobject> 0237 <imageobject><imagedata fileref="openwallet-request.png" format="PNG"/></imageobject> 0238 <textobject><phrase>Request to open a wallet</phrase></textobject> 0239 </mediaobject> 0240 </screenshot> 0241 0242 <para>This connects the application to the wallet, enables it to read the login data from the wallet 0243 and to restore the login information for this website. Once an application is connected to 0244 the wallet, it can automatically restore any login information stored in the wallet.</para> 0245 0246 </sect1> 0247 0248 </chapter> 0249 0250 <chapter id="kwalletmanager5"> 0251 <title>&kwalletmanager5;</title> 0252 0253 <para>&kwalletmanager5; serves a number of functions. Firstly it allows you to see if 0254 any wallets are open, which wallets those are, and which applications are 0255 using each wallet. You can disconnect an application's access to a wallet 0256 from within the &kwalletmanager5;.</para> 0257 0258 <para>You may also manage the wallets installed on the system, creating and 0259 deleting wallets and manipulating their contents (changing keys, ...).</para> 0260 0261 <para>The &kwalletmanager5; application is launched with <menuchoice> 0262 <guimenu>Applications</guimenu><guisubmenu>System</guisubmenu> 0263 <guimenuitem>Wallet Management Tool</guimenuitem></menuchoice> from the 0264 application launcher. 0265 Alternatively start &krunner; with shortcut <keycombo 0266 action="simul">&Alt;<keycap>F2</keycap></keycombo> and enter 0267 <command>kwalletmanager5</command>.</para> 0268 0269 <para>Click once on the system tray wallet icon to display the &kwalletmanager5; 0270 window.</para> 0271 <para> 0272 <screenshot> 0273 <screeninfo>Main window with one wallet</screeninfo> 0274 <mediaobject> 0275 <imageobject> 0276 <imagedata fileref="kwalletmanager.png"/> 0277 </imageobject> 0278 <textobject> 0279 <phrase>Main window with one wallet</phrase> 0280 </textobject> 0281 <caption><para>Main window with one wallet</para></caption> 0282 </mediaobject> 0283 </screenshot> 0284 </para> 0285 0286 <!--FIXME 0287 How to get assistant "First Use"? kwalletwizardpageintro.ui 0288 Last code change with http://websvn.kde.org/?view=revision&revision=882694 0289 see also https://bugs.kde.org/show_bug.cgi?id=290309 0290 --> 0291 <sect1 id="kwalletmanager-wallet-window"> 0292 <title>The Wallet Window</title> 0293 0294 <para>If you have more than one wallet all available wallets are shown on the left.</para> 0295 0296 <para>Clicking on a wallet in the &kwalletmanager5; window will display 0297 that wallet's status and the contents of an opened wallet. A wallet may contain any number 0298 of folders, which allow storing of password information. By default a wallet 0299 will contain folders named Form Data and Passwords. 0300 </para> 0301 0302 <screenshot> 0303 <screeninfo>Main window with two wallets</screeninfo> 0304 <mediaobject> 0305 <imageobject> 0306 <imagedata fileref="kwallet-edit.png"/> 0307 </imageobject> 0308 <textobject> 0309 <phrase>Main window with two wallets</phrase> 0310 </textobject> 0311 <caption><para>Main window with two wallets</para></caption> 0312 </mediaobject> 0313 </screenshot> 0314 <para>Use <guibutton>Open</guibutton> to display the content of a closed wallet. 0315 You will be requested to enter the master password.</para> 0316 0317 <sect2> 0318 <title>Contents tab</title> 0319 0320 <para>The <guilabel>Contents</guilabel> tab has three sections:</para> 0321 0322 <itemizedlist> 0323 <listitem><para>A search line to filter the items of the current 0324 wallet</para></listitem> 0325 <listitem><para>The tree view of the folders contained in the wallet. 0326 Click the <guiicon>></guiicon> / <guiicon>v</guiicon> icons to expand or collapse 0327 the tree view.</para></listitem> 0328 <listitem><para>The contents of the selected folder entry at the right side. 0329 By default the password and value are hidden. To display and edit them enable 0330 <guilabel>Show values</guilabel> or click the <guilabel>Show Contents</guilabel> button. 0331 </para></listitem> 0332 </itemizedlist> 0333 0334 <para>Folders may be added or deleted via the context menu, and selecting a folder will update 0335 the folder entry list and the summary display. Selecting a folder entry 0336 will update the entry contents pane, and allow you to edit that 0337 entry.</para> 0338 0339 <para>Entries may also be created, renamed or deleted via the context menu for the 0340 folder contents.</para> 0341 0342 <para>All folders and entries may be dragged and dropped into other wallets 0343 or folders respectively. This allows a user to easily package up a new 0344 wallet for transfer to another environment. For instance, a new wallet 0345 could be created and copied onto a removable flash memory device. Important 0346 passwords could be transferred there, so you have them available in other 0347 locations.</para> 0348 0349 <sect3 id="kwallet-import-export"> 0350 <title>Import and Export</title> 0351 <para>If you want to transfer your secrets to another device or computer use 0352 the actions in the <guimenu>File</guimenu> menu. With <guimenuitem>Export as encrypted</guimenuitem> 0353 wallets can be exported into an encrypted archive file. 0354 Importing this archive file with <guimenuitem>Import encrypted</guimenuitem> 0355 you have to provide the master password of the wallet. 0356 </para> 0357 <para>Alternatively a <filename class="extension">.xml</filename> file can be used for transferring 0358 a wallet. Keep in mind that all secrets are stored as plain text in this file. 0359 </para> 0360 </sect3> 0361 0362 <sect3 id="kwallet-adding-entries"> 0363 <title>Adding Entries Manually</title> 0364 <para>Open the context menu with the &RMB; click on <guilabel>Maps</guilabel> or 0365 <guilabel>Passwords</guilabel> in the <guilabel>Folder</guilabel> tree view. 0366 Select <guimenuitem>New</guimenuitem> or <guimenuitem>New Folder</guimenuitem> and choose a name for the new entry.</para> 0367 <para>In the folder contents pane select <guilabel>New Folder</guilabel> from 0368 the context menu of <quote>Form Data</quote> or <quote>Passwords</quote>. 0369 For passwords click the <guilabel>Show Contents</guilabel> button, enter the new password. 0370 For Maps you have to add a <guilabel>Key</guilabel> and a <guilabel>Value</guilabel>. 0371 Click the <guilabel>Save</guilabel> button to store the new entries in the encrypted 0372 wallet file. 0373 </para> 0374 </sect3> 0375 </sect2> 0376 0377 <sect2> 0378 <title>Applications tab</title> 0379 <para> 0380 <screenshot> 0381 <screeninfo>Applications tab</screeninfo> 0382 <mediaobject> 0383 <imageobject> 0384 <imagedata fileref="kwallet-applications.png"/> 0385 </imageobject> 0386 <textobject> 0387 <phrase>Applications tab</phrase> 0388 </textobject> 0389 <caption><para>Applications tab</para></caption> 0390 </mediaobject> 0391 </screenshot> 0392 </para> 0393 <para>The first list shows all applications currently connected to the selected wallet. 0394 Use the button at the right side of each entry to disconnect the application.</para> 0395 0396 <para>In the second list all applications are displayed which are authorized to access the wallet. 0397 Use the button right of each entry in the list to revoke the access. 0398 </para> 0399 <!-- FIXME difference to remove the policy in kwallermanager settings dialog?--> 0400 </sect2> 0401 </sect1> 0402 0403 </chapter> 0404 0405 <chapter id="kwallet-kcontrol-module"> 0406 <title>Configuring &kwallet5;</title> 0407 0408 <sect1 id="wallet-preferences"> 0409 <title>Wallet Preferences</title> 0410 0411 <para>&kwallet5; contains a small configuration panel with several options 0412 that allow you to tune &kwallet5; to your personal preferences. The 0413 default settings for &kwallet5; are sufficient for most users.</para> 0414 0415 <para>Check the box to enable or disable the &kde; wallet subsystem 0416 entirely. If this box is unchecked, then &kwallet5; is entirely disabled and 0417 none of the other options here have any effect, nor will &kwallet5; record 0418 any information, or offer to fill in forms for you.</para> 0419 0420 <variablelist> 0421 <title><guilabel>Close Wallet</guilabel></title> 0422 <varlistentry> 0423 <term><guilabel>Close when unused for:</guilabel></term> 0424 <listitem> 0425 <para>Close the current wallet after a period of inactivity. If you check this 0426 option, set the period in the box, default is 10 minutes. When a wallet is 0427 closed, the password is needed to access it again.</para> 0428 </listitem> 0429 </varlistentry> 0430 0431 <varlistentry> 0432 <term><guilabel>Close when screensaver starts</guilabel></term> 0433 <listitem> 0434 <para>Close the wallet as soon as the screen saver starts. When a wallet is 0435 closed, the password is needed to access it again.</para> 0436 </listitem> 0437 </varlistentry> 0438 0439 <varlistentry> 0440 <term><guilabel>Close when last application stops using it</guilabel></term> 0441 <listitem> 0442 <para>Close the wallet as soon as applications that use it have stopped. Note 0443 that your wallets will only be closed when all the applications that use it have 0444 stopped. When a wallet is closed, the password is needed to access it 0445 again.</para> 0446 </listitem> 0447 </varlistentry> 0448 </variablelist> 0449 0450 <variablelist> 0451 <title><guilabel>Automatic Wallet Selection</guilabel></title> 0452 <varlistentry> 0453 <term><guilabel>Select wallet to use as default:</guilabel></term> 0454 <listitem> 0455 <para>Select which wallet you want to use as default wallet. 0456 Please keep in mind that only the wallet named <guilabel>kdewallet</guilabel> 0457 will be opened automatically at login, if this wallet and your login 0458 password are identical. 0459 </para> 0460 </listitem> 0461 </varlistentry> 0462 0463 <varlistentry> 0464 <term><guilabel>Different wallet for local passwords:</guilabel></term> 0465 <listitem> 0466 <para>If checked, choose a different wallet for local passwords.</para> 0467 </listitem> 0468 </varlistentry> 0469 </variablelist> 0470 0471 <variablelist> 0472 <title><guilabel>Wallet Manager</guilabel></title> 0473 <varlistentry> 0474 <term><guilabel>Show manager in system tray</guilabel></term> 0475 <listitem> 0476 <para>Enable the wallet manager to have its icon in the system tray.</para> 0477 </listitem> 0478 </varlistentry> 0479 0480 <varlistentry> 0481 <term><guilabel>Hide System tray icon when last wallet 0482 closes</guilabel></term> 0483 <listitem> 0484 <para>When there is no wallet in use anymore, remove the wallet icon from the 0485 system tray.</para> 0486 </listitem> 0487 </varlistentry> 0488 </variablelist> 0489 0490 <para>Finally, there is a button labeled <guibutton>Launch Wallet 0491 Manager</guibutton>, which does precisely that.</para> 0492 <para>This button is only visible if &kwalletmanager5; is not running</para> 0493 </sect1> 0494 0495 <sect1 id="wallet-access-control"> 0496 <title>Access Control</title> 0497 0498 <para>There is only one option on this page:</para> 0499 0500 <variablelist> 0501 <varlistentry> 0502 <term><guilabel>Prompt when an application accesses a wallet</guilabel></term> 0503 <listitem> 0504 <para>Signal you when an application gains access to a wallet.</para> 0505 </listitem> 0506 </varlistentry> 0507 </variablelist> 0508 0509 <para>Next there is a tree style view of the access controls for your wallets.</para> 0510 0511 <screenshot> 0512 <screeninfo>Access Control</screeninfo> 0513 <mediaobject> 0514 <imageobject> 0515 <imagedata fileref="kwallet-access-control.png"/> 0516 </imageobject> 0517 <textobject> 0518 <phrase>Access Control</phrase> 0519 </textobject> 0520 </mediaobject> 0521 </screenshot> 0522 0523 <para>Click with the &LMB; on the <guiicon>></guiicon> symbol beside a wallet name to 0524 expand the tree. You will see the name of each application that has asked 0525 for access to the wallet, and the policy you set for it. You cannot edit 0526 policies here, or add them, but it is possible to delete an entry by &RMB; 0527 clicking on it and choosing <guimenuitem>Delete</guimenuitem> from the 0528 context menu that appears, or by simply selecting it and pressing the 0529 <keysym>Del</keysym> key.</para> 0530 0531 <para>An application that has been allowed access to a wallet is granted access to 0532 all passwords stored inside.</para> 0533 0534 <para>If you erroneously configured an application not to use the &kwallet5; 0535 delete the policy for this application here.</para> 0536 <!-- FIXME difference to Revoke Authorization in kwallermanager?--> 0537 <para> 0538 On the next start of this application you can define a new policy for access to the wallet. 0539 </para> 0540 <screenshot> 0541 <screeninfo>Access request to open a wallet</screeninfo> 0542 <mediaobject> 0543 <imageobject> 0544 <imagedata fileref="application-request-to-open-wallet.png"/> 0545 </imageobject> 0546 <textobject> 0547 <phrase>Access request to open a wallet</phrase> 0548 </textobject> 0549 <caption><para>An application requesting access to a wallet</para></caption> 0550 </mediaobject> 0551 </screenshot> 0552 0553 </sect1> 0554 0555 </chapter> 0556 0557 <chapter id="advanced-features"> 0558 <title>Advanced Features</title> 0559 0560 <para>Wallets can be dragged from the &kwalletmanager5; window. This allows 0561 you to drag the wallet to a file browser window, where you can choose to 0562 copy, move, or link the wallet, as desired.</para> 0563 0564 <para>You might use this to save a wallet to portable media, such as a 0565 USB keychain, so that you can take your passwords with you to work or 0566 on a vacation, and still have easy access to important sites.</para> 0567 0568 </chapter> 0569 0570 <chapter id="credits-and-license"> 0571 <title>Credits and License</title> 0572 0573 <para>&kwallet5; © 2003 &George.Staikos;</para> 0574 <para>Documentation © &Lauri.Watts; and &George.Staikos;</para> 0575 0576 <!-- TRANS:CREDIT_FOR_TRANSLATORS --> 0577 0578 &underFDL; 0579 &underGPL; 0580 0581 </chapter> 0582 0583 &documentation.index; 0584 0585 </book> 0586 0587 <!-- 0588 Local Variables: 0589 mode: sgml 0590 sgml-minimize-attributes:nil 0591 sgml-general-insert-case:lower 0592 sgml-indent-step:0 0593 sgml-indent-data:nil 0594 End: 0595 0596 // vim:ts=2:sw=2:tw=78:noet 0597 -->