[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: snapshot 20041211ts (2.99.11)



>だと理解しています。で、どちらの方法でも、画面に
>
>NetBSD/macppc (hostname) (ttyE0)
>
>login: 
>
>が出るのですが、文字が入力出来ません。

画面とキーボードがコンソールの時は入力できますよね。
シリアルコンソールで wscons=YES 等している場合は wsmux がないと
だめみたいです。wsmux 使えってことらしい。
(なにしろ wskbd0 と wsdisplay0 がつながってないと ioctl が ENXIO
なので、それをつなげる ioctl ができない)

少々(かなり:-)無理矢理なパッチをあてると wsmux なしでもできる
ようになります。キーボードの場合しか書いてませんがまあ十分でしょう。

ところで wsmux って複数の画面と複数のキーボードをそれぞれ接続
(ひとまとめでなく)できないんでしょうかねえ。最近のビデオカードは
2画面持てたりするので、キーボードを2つつければ2人でログインでき
そうなもんですが。(実用性はともかく:-)


*** wsdisplay.c	Wed Dec 22 22:38:59 2004
--- wsdisplay.c	Tue Dec 28 20:57:20 2004
***************
*** 1317,1322 ****
--- 1317,1327 ----
  #define d ((struct wsmux_device *)data)
  		if (d->idx == -1 && d->type == WSMUX_KBD)
  			d->idx = wskbd_pickfree();
+ #if NWSMUX == 0
+ 		if (d->type == WSMUX_KBD)
+ 			return wskbd_add_display(d->idx, &sc->sc_dv,
+ 			    &sc->sc_input);
+ #endif
  #undef d
  		/* fall into */
  	case WSMUXIO_INJECTEVENT:
*** wsdisplayvar.h	Sat Jul 31 08:59:09 2004
--- wsdisplayvar.h	Tue Dec 28 20:58:03 2004
***************
*** 219,224 ****
--- 219,227 ----
  const struct wsscreen_descr *
      wsdisplay_screentype_pick(const struct wsscreen_list *, const char *);
  
+ struct wsevsrc;
+ int wskbd_add_display(int, struct device *, struct wsevsrc **);
+ 
  #if defined(_KERNEL)
  #  if defined(_KERNEL_OPT)
  #    include "opt_wsmsgattrs.h"
*** wskbd.c	Wed Dec 22 22:38:59 2004
--- wskbd.c	Tue Dec 28 20:57:10 2004
***************
*** 1709,1711 ****
--- 1709,1744 ----
  	id->t_symbols[0] = res;
  	return (1);
  }
+ 
+ #if NWSMUX == 0
+ int
+ wskbd_add_display(unit, dispsc, dme)
+ 	int unit;
+ 	struct device *dispsc;
+ 	struct wsevsrc **dme;
+ {
+ 	int error = 0;
+ #if NWSDISPLAY > 0
+ 	struct wskbd_softc *sc;
+ 	struct wsevsrc me;
+ 
+ 	if (unit < 0 || unit >= wskbd_cd.cd_ndevs ||
+ 	    (sc = wskbd_cd.cd_devs[unit]) == NULL)
+ 		return ENXIO;
+ 
+ 	if (sc->sc_base.me_evp != NULL)
+ 		return EBUSY;
+ 
+ 	me = sc->sc_base;
+ 	me.me_dispdv = dispsc;
+ 
+ 	error = wskbd_set_display(&sc->sc_base.me_dv, &me);
+ 	/* Ignore that the console already has a display. */
+ 	if (error == EBUSY)
+ 		error = 0;
+ 	if (error == 0)
+ 		*dme = &sc->sc_base;
+ #endif
+ 	return error;
+ }
+ #endif