[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