Tại sao các ký tự ngẫu nhiên xuất hiện trong các thiết bị đầu cuối trong Windows?


1

Tôi đã lập trình trên Windows được vài năm và có một vấn đề đang ngày càng trở nên khó chịu khi tôi thực sự bắt đầu sử dụng nhiều thiết bị đầu cuối khác nhau trong Windows cho mục đích phát triển của mình. Để đăng nhập vào các máy từ xa, tôi sử dụng PuTTy và gần đây tôi đã phát hiện ra Cygwin, thứ mà tôi thấy là một vỏ thực sự tuyệt vời. Tôi cũng có MacBook Pro và tôi cũng sử dụng Terminal một chút.

Điều tôi nhận thấy là không cần tôi gõ bất cứ thứ gì, 8 ~ sẽ tự gõ vào thiết bị đầu cuối của tôi và nếu tôi rời khỏi máy tính trong 10 hoặc 15 phút, tôi sẽ thường xuyên thấy một cái gì đó như:

8 ~ 8 ~ 8 ~ 8 ~ 8 ~ 8 ~ 8 ~ 8 ~ 8 ~

Ngoài ra, khi tôi ở trong emacs, tôi nhận thấy rằng các số sẽ xuất hiện ngẫu nhiên mà không cần nhập chúng như 012 hoặc 34, v.v. Điều này đã xảy ra với tôi trên nhiều loại máy Windows khác nhau và tôi đã thử có thể hàng trăm loại khác nhau Google tìm kiếm để thử và xác định lý do tại sao điều này xảy ra và tôi hoàn toàn không gặp may mắn trong việc tìm hiểu điều gì gây ra điều này.

Tôi thực sự sẽ đánh giá cao bất kỳ sự giúp đỡ trong việc này. Tôi biết đây thực sự không phải là một câu hỏi lập trình, nhưng tôi cho rằng Stack Overflow sẽ không đánh giá cao câu hỏi này và vì bạn là tất cả các lập trình viên, tôi cho rằng một trong số các bạn sẽ có cái nhìn sâu sắc.

Cảm ơn rất nhiều.

EDIT : Ban đầu tôi đã đăng bài này trên www.programmers.stackexchange.com và tôi đã nhận được ba ý kiến ​​yêu cầu tôi làm rõ, vì vậy tôi đang đăng lại câu hỏi với sự làm rõ được hỏi.

  1. Nó gần như chắc chắn là một hình thức giữ gìn, nhưng bối cảnh không rõ ràng lắm. Bạn đang sử dụng Windows, sử dụng PuTTy và kết nối với emacs trên một máy khác và nhận các ký tự ngẫu nhiên? Những gì bạn đã cố gắng để cô lập nó? Họ có xuất hiện nếu bạn chỉ mở một cửa sổ và không kết nối? Nếu bạn chỉ mở một cửa sổ giao diện điều khiển?

Nó xảy ra khi tôi chỉ sử dụng emacs / Cygwin cục bộ và nó cũng xảy ra khi tôi sử dụng emacs qua puTTy khi đăng nhập vào máy chủ linux của trường tôi. Tôi thực sự không biết tôi có thể làm gì để cô lập nó, tôi thậm chí không biết nguyên nhân! Nó không bao giờ xảy ra trên mac, cục bộ hoặc khi tôi đăng nhập vào cùng một máy chủ, vì vậy tôi cho rằng vấn đề phải là cục bộ. Vì nó xảy ra khi tôi đăng nhập vào máy chủ của trường thông qua Cygwin hoặc putty, cũng như khi tôi chỉ sử dụng Cygwin với emacs cục bộ, nó phải là một cái gì đó với Windows.

  1. Điều này chỉ xảy ra từ Windows hoặc cũng từ Mac? Nó chỉ xảy ra khi bạn đăng nhập vào một máy cụ thể, hoặc cho người khác? Nếu chỉ dành cho một máy cụ thể, hệ điều hành nào đang chạy (bản phân phối, phiên bản nào)? Điều này có tương quan với việc di chuyển chuột? Câu hỏi của bạn không có chủ đề ở đây, nhưng nếu bạn thêm thông tin chúng tôi yêu cầu, bạn có thể đăng lại trên Super User.

Không, nó không xảy ra trong máy Mac hoặc khi tôi đăng nhập vào máy chủ của trường. Nó xảy ra với tôi với Windows 8 Pro và Windows 7 Ultimate.


Shell ăn một phần của chuỗi và chỉ hiển thị một nửa của nó. Bạn có thể chạy cattrên một thiết bị đầu cuối, đợi rác xuất hiện, sau đó sao chép nó ở đây? (Nó sẽ tìm kiếm một cái gì đó giống như ^[8~ hoặc ^[[8~hoặc tương đương.) Tôi nghĩ rằng nó sẽ được dễ dàng để trả lời những gì các nhân vật có nghĩa là, ngay cả khi tôi không biết lý do tại sao họ đang được gửi đi.
grawity

Vâng!!!! ^ [[2 ~ và ^ [[8 ~ cả hai đã xuất hiện trước đó. Nó là gì?? Tôi sẽ chạy những gì bạn yêu cầu mặc dù. omg
Arthur Collé

Câu trả lời:


3

Trong trường hợp của tôi, đầu ra định kỳ của chuỗi ký tự 8 ~ là do quá trình nền kết hợp với cửa sổ cygwin shell (Windows7 64 bit) của tôi là cửa sổ hoạt động. Để tắt chế độ bảo vệ màn hình khỏi bị nhập mỗi x phút và khóa máy tính làm việc của tôi, tôi đã cài đặt một chương trình có tên là caffeine.exe, trong nền, mô phỏng hoạt động nhập định kỳ (bàn phím hoặc chuột; tôi không chắc chắn 100% đúng không hiện nay). Tôi thấy đầu ra chuỗi ký tự 8 ~ định kỳ giống nhau khoảng mỗi phút, có lẽ là khi đầu vào mô phỏng được tạo. Tóm lại, nếu cửa sổ cygwin của tôi không phải là cửa sổ hoạt động hoặc nếu cửa sổ cygwin của tôi là cửa sổ hoạt động nhưng tôi vô hiệu hóa caffeine, không có 8 ~ ký tự nào xuất hiện; mặt khác, tôi thấy 8 ~.

Trân trọng, Greg


Thật thú vị, tôi không thấy 8 ký tự tương tự trên máy tính để bàn WindowsXP 32 bit của mình, cũng có caffeine và cygwin đang chạy. Vì vậy, có một số biến số khác đang hoạt động ở đây gây ra sự cố này chỉ trên máy tính xách tay Windows7 của tôi.
Greg Hopkins

2

Đôi khi, các ký tự dường như "ngẫu nhiên" có thể xuất hiện trong các thiết bị đầu cuối hoặc một số chương trình Linux trong Cygwin / SSH vì bạn đã gõ một phím bàn phím không được ánh xạ trên máy. Một thủ phạm lớn của việc này sẽ là các phím macro hoặc đa phương tiện trên bàn phím mở rộng hoặc (trong trường hợp hiếm hơn) nếu bạn có một Fnphím trên bàn phím mà bạn cần sử dụng cho một số lần nhấn phím. Các phím này có thể không được ánh xạ bởi HĐH mà bạn đang điều khiển và do đó có thể xuất hiện trong các thiết bị đầu cuối hoặc những nơi khác mà văn bản có thể được nhập dưới dạng mã / ký tự bàn phím thô mà bàn phím gửi đến HĐH để được giải thích. Đó là cùng một lý do tại sao Conrol+ Csẽ xuất hiện trong các thiết bị đầu cuối như ^C, ví dụ.

Điều có thể xảy ra là bạn nhấn tổ hợp phím hoặc nhấn phím trên bàn phím không được ánh xạ bởi Linux trên máy cụ thể đó và cuối cùng bị gõ vào thiết bị đầu cuối hoặc trình soạn thảo văn bản. Hoặc, có thể có một sự kiện thông thường được thiết lập trên máy tính tự động kích hoạt phím nhấn và khiến nó xuất hiện.

Bạn đã không chỉ định nếu nó xảy ra khi bạn gõ một cái gì đó hoặc ngay cả khi bạn không. Nhưng theo kinh nghiệm của tôi, đây là lý do tại sao bạn có thể thấy điều này xảy ra.

CẬP NHẬT:

Thông qua một số thử nghiệm và lỗi 8~liên quan đến Cygwin, tôi phát hiện ra những gì liên quan đến.

Nó xuất hiện khi bạn nhập tổ hợp phím Ctrl+ Alt+ Shift+ Del. Tôi không biết tại sao nó xuất hiện thường xuyên như vậy, nhưng một cái gì đó trên máy tính của bạn rõ ràng đang kích hoạt đầu vào đó. Nó có thể là một số phần mềm chạy trong nền hoặc có thể là một bàn phím bị lỗi.

Bạn có thể thử xác minh điều này cho mình. Trước tiên tôi nên thử một bàn phím khác và nếu điều đó không có ích, hãy bắt đầu trải qua các quy trình đang chạy của bạn và sử dụng quy trình loại bỏ để thử và cách ly nó là bàn phím nào.


Nó xảy ra cả khi tôi đang gõ (điều này gây khó chịu nhất vì sau đó tôi sẽ chỉ bắt được nếu tôi đang gõ một lệnh trong thiết bị đầu cuối hoặc khi tôi đang biên dịch -_-) và khi tôi không gõ.
Arthur Collé

@Windows Tôi đang cập nhật câu trả lời với nhiều thông tin hơn.
Ben Richards

0

Trên các hệ điều hành giống Unix, các chương trình sử dụng các tính năng khác nhau của thiết bị đầu cuối (màu sắc, chuyển động con trỏ, v.v.) bằng cách gửi các chuỗi thoát đến thiết bị đầu cuối. Bản thân thiết bị đầu cuối sẽ gửi các chuỗi thoát cho các chương trình khi bạn nhấn các phím đặc biệt khác nhau hoặc (nếu chương trình đã kích hoạt nó) sử dụng chuột trong cửa sổ thiết bị đầu cuối hoặc để đáp ứng với các truy vấn nhất định.

Những chuỗi luôn luôn bắt đầu với một ESCbyte, mà ở những nơi khác nhau có thể xuất hiện như ^[(mà thực sự có nghĩa Ctrl [, nhưng đó là byte cùng vì ASCII làm việc như thế nào), do đó ^[[2~thực sự là ESC, [, 2, ~.

( Shell bash chạy ở chế độ "thô" và diễn giải một số chuỗi phím nhấn, chẳng hạn như phím mũi tên. Khi không nhận ra chuỗi đang nhập, nó sẽ loại bỏ phần nó nhìn thấy và tiếp tục diễn giải phần còn lại là phím nhấn thông thường - đó là lý do tại sao Một nửa chuỗi, chẳng hạn như ~, cuối cùng được chèn vào dòng lệnh. Mặt khác, khi bạn chạy cathoặc đang biên dịch một cái gì đó, mọi thứ bạn nhập vào sẽ được hiển thị đầy đủ bởi chính thiết bị đầu cuối, vì vậy bạn có thể thấy toàn bộ " trình tự không bị hư hại. Đó là lý do tại sao tôi yêu cầu bạn chạy cat.)

Thông thường, các chuỗi đại diện cho các lần nhấn phím kết thúc bằng a ~. Trong số hai bạn đã đề cập trong bình luận của bạn ESC [ 2 ~, tương ứng với Insertkhóa. Một cái khác ( ESC [ 8 ~) tôi không thể tìm thấy ngay cả trong mã nguồn của PuTTY [chưa]. Vì vậy, tôi không chắc chắn nếu bạn nhớ chính xác các mã.


"8 ~" tự nó xuất hiện theo nghĩa đen cứ sau 5 phút. Tôi đã để thiết bị đầu cuối mở với con mèo được nhập trong 10 phút và cho đến nay vẫn chưa có gì xuất hiện
Arthur Collé


Xin lỗi nếu liên kết trên vi phạm ĐKDV với thông tin cá nhân của tôi nhưng tôi thực sự không quan tâm nếu mọi người biết tên của tôi. Tôi chỉ muốn bạn xem một ví dụ. Vì một số lý do, tôi không nhận được đầu vào (không) "ngẫu nhiên" khi tôi gõ mèo, tôi đã rời khỏi vỏ trong 17 phút và tôi không nhận được gì
Arthur Collé
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.