1.\" Copyright (c) 1996 2.\" Mike Pritchard <mpp@FreeBSD.org>. All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. 9.\" 2. Redistributions in binary form must reproduce the above copyright 10.\" notice, this list of conditions and the following disclaimer in the 11.\" documentation and/or other materials provided with the distribution. 12.\" 3. All advertising materials mentioning features or use of this software 13.\" must display the following acknowledgement: 14.\" This product includes software developed by Mike Pritchard. 15.\" 4. Neither the name of the author nor the names of its contributors 16.\" may be used to endorse or promote products derived from this software 17.\" without specific prior written permission. 18.\" 19.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 20.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 23.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29.\" SUCH DAMAGE. 30.\" 31.\" $FreeBSD$ 32.\" 33.Dd November 12, 2004 34.Dt MOUSED 8 35.Os 36.Sh NAME 37.Nm moused 38.Nd pass mouse data to the console driver 39.Sh SYNOPSIS 40.Nm 41.Op Fl DPRacdfs 42.Op Fl I Ar file 43.Op Fl F Ar rate 44.Op Fl r Ar resolution 45.Op Fl S Ar baudrate 46.Op Fl VH Op Fl U Ar distance 47.Op Fl a Ar X Ns Op , Ns Ar Y 48.Op Fl C Ar threshold 49.Op Fl m Ar N=M 50.Op Fl w Ar N 51.Op Fl z Ar target 52.Op Fl t Ar mousetype 53.Op Fl l Ar level 54.Op Fl 3 Op Fl E Ar timeout 55.Op Fl T Ar distance Ns Op , Ns Ar time Ns Op , Ns Ar after 56.Fl p Ar port 57.Pp 58.Nm 59.Op Fl Pd 60.Fl p Ar port 61.Fl i Ar info 62.Sh DESCRIPTION 63The 64.Nm 65utility and the console driver work together to support 66mouse operation in the text console and user programs. 67They virtualize the mouse and provide user programs with mouse data 68in the standard format 69(see 70.Xr sysmouse 4 ) . 71.Pp 72The mouse daemon listens to the specified port for mouse data, 73interprets and then passes it via ioctls to the console driver. 74The mouse daemon 75reports translation movement, button press/release 76events and movement of the roller or the wheel if available. 77The roller/wheel movement is reported as 78.Dq Z 79axis movement. 80.Pp 81The console driver will display the mouse pointer on the screen 82and provide cut and paste functions if the mouse pointer is enabled 83in the virtual console via 84.Xr vidcontrol 1 . 85If 86.Xr sysmouse 4 87is opened by the user program, the console driver also passes the mouse 88data to the device so that the user program will see it. 89.Pp 90If the mouse daemon receives the signal 91.Dv SIGHUP , 92it will reopen the mouse port and reinitialize itself. 93Useful if 94the mouse is attached/detached while the system is suspended. 95.Pp 96If the mouse daemon receives the signal 97.Dv SIGUSR1 , 98it will stop passing mouse events. 99Sending the signal 100.Dv SIGUSR1 101again will resume passing mouse events. 102Useful if your typing on a laptop is 103interrupted by accidentally touching the mouse pad. 104.Pp 105The following options are available: 106.Bl -tag -width indent 107.It Fl 3 108Emulate the third (middle) button for 2-button mice. 109It is emulated 110by pressing the left and right physical buttons simultaneously. 111.It Fl C Ar threshold 112Set double click speed as the maximum interval in msec between button clicks. 113Without this option, the default value of 500 msec will be assumed. 114This option will have effect only on the cut and paste operations 115in the text mode console. 116The user program which is reading mouse data 117via 118.Xr sysmouse 4 119will not be affected. 120.It Fl D 121Lower DTR on the serial port. 122This option is valid only if 123.Ar mousesystems 124is selected as the protocol type. 125The DTR line may need to be dropped for a 3-button mouse 126to operate in the 127.Ar mousesystems 128mode. 129.It Fl E Ar timeout 130When the third button emulation is enabled 131(see above), 132the 133.Nm 134utility waits 135.Ar timeout 136msec at most before deciding whether two buttons are being pressed 137simultaneously. 138The default timeout is 100 msec. 139.It Fl F Ar rate 140Set the report rate (reports/sec) of the device if supported. 141.It Fl H 142Enable 143.Dq Horizontal Virtual Scrolling . 144With this option set, holding the middle mouse 145button down will cause motion to be interpreted as 146horizontal scrolling. 147Use the 148.Fl U 149option to set the distance the mouse must move before the scrolling mode is 150activated. 151This option may be used with or without the 152.Fl V 153option. 154.It Fl I Ar file 155Write the process id of the 156.Nm 157utility in the specified file. 158Without this option, the process id will be stored in 159.Pa /var/run/moused.pid . 160.It Fl P 161Do not start the Plug and Play COM device enumeration procedure 162when identifying the serial mouse. 163If this option is given together with the 164.Fl i 165option, the 166.Nm 167utility will not be able to print useful information for the serial mouse. 168.It Fl R 169Lower RTS on the serial port. 170This option is valid only if 171.Ar mousesystems 172is selected as the protocol type by the 173.Fl t 174option below. 175It is often used with the 176.Fl D 177option above. 178Both RTS and DTR lines may need to be dropped for 179a 3-button mouse to operate in the 180.Ar mousesystems 181mode. 182.It Fl S Ar baudrate 183Select the baudrate for the serial port (1200 to 9600). 184Not all serial mice support this option. 185.It Fl T Ar distance Ns Op , Ns Ar time Ns Op , Ns Ar after 186Terminate drift. 187Use this option if mouse pointer slowly wanders when mouse is not moved. 188Movements up to 189.Ar distance 190(for example 4) pixels (X+Y) in 191.Ar time 192msec (default 500) are ignored, except during 193.Ar after 194msec (default 4000) since last real mouse movement. 195.It Fl V 196Enable 197.Dq Virtual Scrolling . 198With this option set, holding the middle mouse 199button down will cause motion to be interpreted as scrolling. 200Use the 201.Fl U 202option to set the distance the mouse must move before the scrolling mode is 203activated. 204.It Fl U Ar distance 205When 206.Dq Virtual Scrolling 207is enabled, the 208.Fl U 209option can be used to set the 210.Ar distance 211(in pixels) that the mouse must move before the scrolling 212mode is activated. 213The default 214.Ar distance 215is 3 pixels. 216.It Fl a Ar X Ns Op , Ns Ar Y 217Accelerate or decelerate the mouse input. 218This is a linear acceleration only. 219Values less than 1.0 slow down movement, values greater than 1.0 speed it 220up. 221Specifying only one value sets the acceleration for both axes. 222.It Fl c 223Some mice report middle button down events 224as if the left and right buttons are being pressed. 225This option handles this. 226.It Fl d 227Enable debugging messages. 228.It Fl f 229Do not become a daemon and instead run as a foreground process. 230Useful for testing and debugging. 231.It Fl i Ar info 232Print specified information and quit. 233Available pieces of 234information are: 235.Pp 236.Bl -tag -compact -width modelxxx 237.It Ar port 238Port (device file) name, i.e.\& 239.Pa /dev/cuad0 , 240.Pa /dev/mse0 241and 242.Pa /dev/psm0 . 243.It Ar if 244Interface type: serial, bus, inport or ps/2. 245.It Ar type 246Protocol type. 247It is one of the types listed under the 248.Fl t 249option below or 250.Ar sysmouse 251if the driver supports the 252.Ar sysmouse 253data format standard. 254.It Ar model 255Mouse model. 256The 257.Nm 258utility may not always be able to identify the model. 259.It Ar all 260All of the above items. 261Print port, interface, type and model in this order 262in one line. 263.El 264.Pp 265If the 266.Nm 267utility cannot determine the requested information, it prints 268.Dq Li unknown 269or 270.Dq Li generic . 271.It Fl l Ar level 272Specifies at which level 273.Nm 274should operate the mouse driver. 275Refer to 276.Sx Operation Levels 277in 278.Xr psm 4 279for more information on this. 280.It Fl m Ar N=M 281Assign the physical button 282.Ar M 283to the logical button 284.Ar N . 285You may specify as many instances of this option as you like. 286More than one physical button may be assigned to a logical button at the 287same time. 288In this case the logical button will be down, 289if either of the assigned physical buttons is held down. 290Do not put space around 291.Ql = . 292.It Fl p Ar port 293Use 294.Ar port 295to communicate with the mouse. 296.It Fl r Ar resolution 297Set the resolution of the device; in Dots Per Inch, or 298.Ar low , 299.Ar medium-low , 300.Ar medium-high 301or 302.Ar high . 303This option may not be supported by all the device. 304.It Fl s 305Select a baudrate of 9600 for the serial line. 306Not all serial mice support this option. 307.It Fl t Ar type 308Specify the protocol type of the mouse attached to the port. 309You may explicitly specify a type listed below, or use 310.Ar auto 311to let the 312.Nm 313utility automatically select an appropriate protocol for the given 314mouse. 315If you entirely omit this option in the command line, 316.Fl t Ar auto 317is assumed. 318Under normal circumstances, 319you need to use this option only if the 320.Nm 321utility is not able to detect the protocol automatically 322(see 323.Sx "Configuring Mouse Daemon" ) . 324.Pp 325Note that if a protocol type is specified with this option, the 326.Fl P 327option above is implied and Plug and Play COM device enumeration 328procedure will be disabled. 329.Pp 330Also note that if your mouse is attached to the PS/2 mouse port, you should 331always choose 332.Ar auto 333or 334.Ar ps/2 , 335regardless of the brand and model of the mouse. 336Likewise, if your 337mouse is attached to the bus mouse port, choose 338.Ar auto 339or 340.Ar busmouse . 341Serial mouse protocols will not work with these mice. 342.Pp 343For the USB mouse, the protocol must be 344.Ar auto . 345No other protocol will work with the USB mouse. 346.Pp 347Valid types for this option are 348listed below. 349.Pp 350For the serial mouse: 351.Bl -tag -compact -width mousesystemsxxx 352.It Ar microsoft 353Microsoft serial mouse protocol. 354Most 2-button serial mice use this protocol. 355.It Ar intellimouse 356Microsoft IntelliMouse protocol. 357Genius NetMouse, 358.Tn ASCII 359Mie Mouse, 360Logitech MouseMan+ and FirstMouse+ use this protocol too. 361Other mice with a roller/wheel may be compatible with this protocol. 362.It Ar mousesystems 363MouseSystems 5-byte protocol. 3643-button mice may use this protocol. 365.It Ar mmseries 366MM Series mouse protocol. 367.It Ar logitech 368Logitech mouse protocol. 369Note that this is for old Logitech models. 370.Ar mouseman 371or 372.Ar intellimouse 373should be specified for newer models. 374.It Ar mouseman 375Logitech MouseMan and TrackMan protocol. 376Some 3-button mice may be compatible 377with this protocol. 378Note that MouseMan+ and FirstMouse+ use 379.Ar intellimouse 380protocol rather than this one. 381.It Ar glidepoint 382ALPS GlidePoint protocol. 383.It Ar thinkingmouse 384Kensington ThinkingMouse protocol. 385.It Ar mmhitab 386Hitachi tablet protocol. 387.It Ar x10mouseremote 388X10 MouseRemote. 389.It Ar kidspad 390Genius Kidspad and Easypad protocol. 391.It Ar versapad 392Interlink VersaPad protocol. 393.El 394.It Ar gtco_digipad 395GTCO Digipad protocol. 396.Pp 397For the bus and InPort mouse: 398.Bl -tag -compact -width mousesystemsxxx 399.It Ar busmouse 400This is the only protocol type available for 401the bus and InPort mouse and should be specified for any bus mice 402and InPort mice, regardless of the brand. 403.El 404.Pp 405For the PS/2 mouse: 406.Bl -tag -compact -width mousesystemsxxx 407.It Ar ps/2 408This is the only protocol type available for the PS/2 mouse 409and should be specified for any PS/2 mice, regardless of the brand. 410.El 411.Pp 412For the USB mouse, 413.Ar auto 414is the only protocol type available for the USB mouse 415and should be specified for any USB mice, regardless of the brand. 416.It Fl w Ar N 417Make the physical button 418.Ar N 419act as the wheel mode button. 420While this button is pressed, X and Y axis movement is reported to be zero 421and the Y axis movement is mapped to Z axis. 422You may further map the Z axis movement to virtual buttons by the 423.Fl z 424option below. 425.It Fl z Ar target 426Map Z axis (roller/wheel) movement to another axis or to virtual buttons. 427Valid 428.Ar target 429maybe: 430.Bl -tag -compact -width x__ 431.It Ar x 432.It Ar y 433X or Y axis movement will be reported when the Z axis movement is detected. 434.It Ar N 435Report down events for the virtual buttons 436.Ar N 437and 438.Ar N+1 439respectively when negative and positive Z axis movement 440is detected. 441There do not need to be physical buttons 442.Ar N 443and 444.Ar N+1 . 445Note that mapping to logical buttons is carried out after mapping 446from the Z axis movement to the virtual buttons is done. 447.It Ar N1 N2 448Report down events for the virtual buttons 449.Ar N1 450and 451.Ar N2 452respectively when negative and positive Z axis movement 453is detected. 454.It Ar N1 N2 N3 N4 455This is useful for the mouse with two wheels of which 456the second wheel is used to generate horizontal scroll action, 457and for the mouse which has a knob or a stick which can detect 458the horizontal force applied by the user. 459.Pp 460The motion of the second wheel will be mapped to the buttons 461.Ar N3 , 462for the negative direction, and 463.Ar N4 , 464for the positive direction. 465If the buttons 466.Ar N3 467and 468.Ar N4 469actually exist in this mouse, their actions will not be detected. 470.Pp 471Note that horizontal movement or second roller/wheel movement may not 472always be detected, 473because there appears to be no accepted standard as to how it is encoded. 474.Pp 475Note also that some mice think left is the negative horizontal direction; 476others may think otherwise. 477Moreover, there are some mice whose two wheels are both mounted vertically, 478and the direction of the second vertical wheel does not match the 479first one. 480.El 481.El 482.Ss Configuring Mouse Daemon 483The first thing you need to know is the interface type 484of the mouse you are going to use. 485It can be determined by looking at the connector of the mouse. 486The serial mouse has a D-Sub female 9- or 25-pin connector. 487The bus and InPort mice have either a D-Sub male 9-pin connector 488or a round DIN 9-pin connector. 489The PS/2 mouse is equipped with a small, round DIN 6-pin connector. 490Some mice come with adapters with which the connector can 491be converted to another. 492If you are to use such an adapter, 493remember the connector at the very end of the mouse/adapter pair is 494what matters. 495The USB mouse has a flat rectangular connector. 496.Pp 497The next thing to decide is a port to use for the given interface. 498For the bus, InPort and PS/2 mice, there is little choice: 499the bus and InPort mice always use 500.Pa /dev/mse0 , 501and the PS/2 mouse is always at 502.Pa /dev/psm0 . 503There may be more than one serial port to which the serial 504mouse can be attached. 505Many people often assign the first, built-in 506serial port 507.Pa /dev/cuad0 508to the mouse. 509You can attach multiple USB mice to your system or to your USB hub. 510They are accessible as 511.Pa /dev/ums0 , /dev/ums1 , 512and so on. 513.Pp 514You may want to create a symbolic link 515.Pa /dev/mouse 516pointing to the real port to which the mouse is connected, so that you 517can easily distinguish which is your 518.Dq mouse 519port later. 520.Pp 521The next step is to guess the appropriate protocol type for the mouse. 522The 523.Nm 524utility may be able to automatically determine the protocol type. 525Run the 526.Nm 527utility with the 528.Fl i 529option and see what it says. 530If the command can identify 531the protocol type, no further investigation is necessary on your part. 532You may start the daemon without explicitly specifying a protocol type 533(see 534.Sx EXAMPLES ) . 535.Pp 536The command may print 537.Ar sysmouse 538if the mouse driver supports this protocol type. 539.Pp 540Note that the 541.Dv type 542and 543.Dv model 544printed by the 545.Fl i 546option do not necessarily match the product name of the pointing device 547in question, but they may give the name of the device with which it is 548compatible. 549.Pp 550If the 551.Fl i 552option yields nothing, you need to specify a protocol type to the 553.Nm 554utility by the 555.Fl t 556option. 557You have to make a guess and try. 558There is rule of thumb: 559.Pp 560.Bl -enum -compact -width 1.X 561.It 562The bus and InPort mice always use 563.Ar busmouse 564protocol regardless of the brand of the mouse. 565.It 566The 567.Ar ps/2 568protocol should always be specified for the PS/2 mouse 569regardless of the brand of the mouse. 570.It 571You must specify the 572.Ar auto 573protocol for the USB mouse. 574.It 575Most 2-button serial mice support the 576.Ar microsoft 577protocol. 578.It 5793-button serial mice may work with the 580.Ar mousesystems 581protocol. 582If it does not, it may work with the 583.Ar microsoft 584protocol although 585the third (middle) button will not function. 5863-button serial mice may also work with the 587.Ar mouseman 588protocol under which the third button may function as expected. 589.It 5903-button serial mice may have a small switch to choose between 591.Dq MS 592and 593.Dq PC , 594or 595.Dq 2 596and 597.Dq 3 . 598.Dq MS 599or 600.Dq 2 601usually mean the 602.Ar microsoft 603protocol. 604.Dq PC 605or 606.Dq 3 607will choose the 608.Ar mousesystems 609protocol. 610.It 611If the mouse has a roller or a wheel, it may be compatible with the 612.Ar intellimouse 613protocol. 614.El 615.Pp 616To test if the selected protocol type is correct for the given mouse, 617enable the mouse pointer in the current virtual console, 618.Pp 619.Dl "vidcontrol -m on" 620.Pp 621start the mouse daemon in the foreground mode, 622.Pp 623.Dl "moused -f -p <selected_port> -t <selected_protocol>" 624.Pp 625and see if the mouse pointer travels correctly 626according to the mouse movement. 627Then try cut & paste features by 628clicking the left, right and middle buttons. 629Type ^C to stop 630the command. 631.Ss Multiple Mice 632As many instances of the mouse daemon as the number of mice attached to 633the system may be run simultaneously; one 634instance for each mouse. 635This is useful if the user wants to use the built-in PS/2 pointing device 636of a laptop computer while on the road, but wants to use a serial 637mouse when s/he attaches the system to the docking station in the office. 638Run two mouse daemons and tell the application program 639(such as the 640.Tn "X\ Window System" ) 641to use 642.Xr sysmouse 4 , 643then the application program will always see mouse data from either mouse. 644When the serial mouse is not attached, the corresponding mouse daemon 645will not detect any movement or button state change and the application 646program will only see mouse data coming from the daemon for the 647PS/2 mouse. 648In contrast when both mice are attached and both of them 649are moved at the same time in this configuration, 650the mouse pointer will travel across the screen just as if movement of 651the mice is combined all together. 652.Sh FILES 653.Bl -tag -width /dev/consolectl -compact 654.It Pa /dev/consolectl 655device to control the console 656.It Pa /dev/mse%d 657bus and InPort mouse driver 658.It Pa /dev/psm%d 659PS/2 mouse driver 660.It Pa /dev/sysmouse 661virtualized mouse driver 662.It Pa /dev/ttyv%d 663virtual consoles 664.It Pa /dev/ums%d 665USB mouse driver 666.It Pa /var/run/moused.pid 667process id of the currently running 668.Nm 669utility 670.It Pa /var/run/MouseRemote 671UNIX-domain stream socket for X10 MouseRemote events 672.El 673.Sh EXAMPLES 674.Dl "moused -p /dev/cuad0 -i type" 675.Pp 676Let the 677.Nm 678utility determine the protocol type of the mouse at the serial port 679.Pa /dev/cuad0 . 680If successful, the command will print the type, otherwise it will say 681.Dq Li unknown . 682.Bd -literal -offset indent 683moused -p /dev/cuad0 684vidcontrol -m on 685.Ed 686.Pp 687If the 688.Nm 689utility is able to identify the protocol type of the mouse at the specified 690port automatically, you can start the daemon without the 691.Fl t 692option and enable the mouse pointer in the text console as above. 693.Bd -literal -offset indent 694moused -p /dev/mouse -t microsoft 695vidcontrol -m on 696.Ed 697.Pp 698Start the mouse daemon on the serial port 699.Pa /dev/mouse . 700The protocol type 701.Ar microsoft 702is explicitly specified by the 703.Fl t 704option. 705.Pp 706.Dl "moused -p /dev/mouse -m 1=3 -m 3=1" 707.Pp 708Assign the physical button 3 (right button) to the logical button 1 709(logical left) and the physical button 1 (left) to the logical 710button 3 (logical right). 711This will effectively swap the left and right buttons. 712.Pp 713.Dl "moused -p /dev/mouse -t intellimouse -z 4" 714.Pp 715Report negative Z axis movement (i.e., mouse wheel) as the button 4 pressed 716and positive Z axis movement (i.e., mouse wheel) as the button 5 pressed. 717.Pp 718If you add 719.Pp 720.Dl "ALL ALL = NOPASSWD: /usr/bin/killall -USR1 moused" 721.Pp 722to your 723.Pa /usr/local/etc/sudoers 724file, and bind 725.Pp 726.Dl "killall -USR1 moused" 727.Pp 728to a key in your window manager, you can suspend mouse events on your laptop if 729you keep brushing over the mouse pad while typing. 730.Sh CAVEATS 731Many pad devices behave as if the first (left) button were pressed if 732the user 733.Dq taps 734the surface of the pad. 735In contrast, some ALPS GlidePoint and Interlink VersaPad models 736treat the tapping action 737as fourth button events. 738Use the option 739.Dq Fl m Li 1=4 740for these models 741to obtain the same effect as the other pad devices. 742.Pp 743Cut and paste functions in the virtual console assume that there 744are three buttons on the mouse. 745The logical button 1 (logical left) selects a region of text in the 746console and copies it to the cut buffer. 747The logical button 3 (logical right) extends the selected region. 748The logical button 2 (logical middle) pastes the selected text 749at the text cursor position. 750If the mouse has only two buttons, the middle, `paste' button 751is not available. 752To obtain the paste function, use the 753.Fl 3 754option to emulate the middle button, or use the 755.Fl m 756option to assign the physical right button to the logical middle button: 757.Dq Fl m Li 2=3 . 758.Sh SEE ALSO 759.Xr kill 1 , 760.Xr vidcontrol 1 , 761.Xr keyboard 4 , 762.Xr mse 4 , 763.Xr psm 4 , 764.Xr screen 4 , 765.Xr sysmouse 4 , 766.Xr ums 4 767.Sh STANDARDS 768The 769.Nm 770utility partially supports 771.Dq Plug and Play External COM Device Specification 772in order to support PnP serial mice. 773However, due to various degrees of conformance to the specification by 774existing serial mice, it does not strictly follow the version 1.0 of the 775standard. 776Even with this less strict approach, 777it may not always determine an appropriate protocol type 778for the given serial mouse. 779.Sh HISTORY 780The 781.Nm 782utility first appeared in 783.Fx 2.2 . 784.Sh AUTHORS 785.An -nosplit 786The 787.Nm 788utility was written by 789.An Michael Smith Aq msmith@FreeBSD.org . 790This manual page was written by 791.An Mike Pritchard Aq mpp@FreeBSD.org . 792The command and manual page have since been updated by 793.An Kazutaka Yokota Aq yokota@FreeBSD.org . 794