Làm cách nào để chọn thiết bị Bluetooth bằng dòng lệnh?


5

Tôi có hai bàn di chuột Bluetooth, một ở nơi làm việc và một ở nhà. Có cách nào để chọn cái này hay cái kia từ dòng lệnh. Quy trình làm việc hiện tại của tôi là vào menu bluetooth, di chuột qua nhà hoặc văn phòng và nhấp vào Kết nối , nhưng tôi ước tôi có thể làm điều này từ thiết bị đầu cuối.



Bạn có thể làm rõ câu trả lời của mình để chúng tôi biết những gì bạn đã thử lại dòng lệnh không? Nếu không, bạn có thể nhận được rất nhiều gợi ý / câu trả lời lãng phí. Ngoài ra, nếu nó có liên quan, bạn có thể muốn mở rộng lý do tại sao bạn muốn kết nối qua thiết bị đầu cuối - tôi hỏi bởi vì nếu để giải quyết vấn đề thì có thể có các lựa chọn khác tốt hơn để giải quyết vấn đề thay vì sử dụng thiết bị đầu cuối.
Monomeeth

Câu trả lời:


4

Ứng dụng CLI nguồn mở này BluetoothConnector có vẻ như là một giải pháp tốt. Tôi đã thử nghiệm và xác nhận rằng nó hoạt động gần đây như macOS 10.14.4.

Nó có sẵn trên GitHub cũng như Homebrew:

$ brew install bluetoothconnector
$ BluetoothConnector --connect 00-11-22-33-44-55 --notify
$ BluetoothConnector --disconnect 00-11-22-33-44-55

2

AFIK, không có tiện ích dòng lệnh tích hợp để quản lý các kết nối Bluetooth riêng lẻ.

Trên thực tế, trang man man blued(OS X Bluetooth daemon) nêu cụ thể:

Trình nền Bluetooth xử lý các giao dịch SDP, quản lý khóa liên kết và chấp nhận kết nối đến. Nó không thể được sử dụng trực tiếp bởi người dùng. (Nhấn mạnh của tôi)

Vì vậy, có vẻ như bạn bị giới hạn tải / dỡ tải daemon BT từ dòng lệnh. Điều đó có thể hữu ích, tuy nhiên. Nếu thiết bị của bạn đang hoạt động, OS X sẽ tự động kết nối với thiết bị khi khởi động. Nói cách khác, nó sẽ tự động kết nối với bất kỳ thiết bị nào trong phạm vi khi daemon khởi động.

Nhận trạng thái Daemon Nếu chúng tôi phát lệnhdefaults read /Library/Preferences/com.apple.Bluetooth.plist ControllerPowerState

Nó phản hồi lại bằng một 1hoặc 0tùy thuộc vào việc BT daemon có chạy hay không; 1 được lên, 0 được xuống.


Dỡ bỏ Daemon

Phát lệnh sudo killall bluednên giết daemon BT. Nhược điểm ở đây là nếu bạn có bàn phím BT, nó sẽ ngừng hoạt động.


(Re) Bắt đầu Daemon

Nếu chúng ta ban hành lệnh: launchctl start com.apple.bluednó sẽ báo cho daemon bắt đầu lại. Sau khi làm như vậy, nó sẽ phát hiện thiết bị trong phạm vi.

Đặt tất cả lại với nhau Đặt nó thành một dòng, chúng ta có thể ra lệnh

sudo killall blued && sleep 3 && launchctl start com.apple.blued

Điều này làm là ....

  1. Giết daemon
  2. Đợi 3 giây để đảm bảo nó đã bị giết (bạn có thể thay đổi điều này nếu muốn)
  3. Bắt đầu daemon.

Bây giờ để làm cho nó dễ dàng hơn

Để làm cho điều này dễ dàng hơn, chúng tôi cung cấp cho nó một bí danh . Bạn có thể gọi bí danh bất cứ điều gì bạn thích; Tôi chỉ sử dụng "btrestart" vì nó có ý nghĩa trong bối cảnh này.

alias btrestart=sudo killall blued && sleep 3 && launchctl start com.apple.blued

Bây giờ, bất cứ nơi nào trong vỏ thiết bị đầu cuối của bạn, nếu bạn gõ btrestartnó sẽ phát lệnh. Khi bạn đã làm việc, bạn có thể thêm nó vào để .bash_profilebí danh được duy trì trong suốt quá trình khởi động lại:

echo alias btrestart=sudo killall blued && sleep 3 && launchctl start com.apple.blued >> ~/.bash_profile


Một vài cảnh báo

  1. Bạn sẽ phải nhập mật khẩu của bạn mỗi lần. Launchctl là một lệnh hệ thống và yêu cầu các đặc quyền nâng cao.
  2. Tất cả các thiết bị BT của bạn sẽ bị ngắt kết nối và kết nối lại. Nếu bạn chỉ có một hoặc hai thiết bị BT, điều này có thể không thành vấn đề

Tôi hy vọng điều này sẽ giúp bạn đi đúng hướng ....


2

Tôi đã kết thúc với phiên bản sửa đổi này từ câu trả lời này và tạo hai tệp, một với "Home Trackpad" và một với "Office Trackpad". Nó hoạt động, nhưng phải mất vài giây để hoàn thành

tell application "System Events" to tell process "SystemUIServer"
  set bt to (first menu bar item whose description is "bluetooth") of menu bar 1
  click bt
  tell (first menu item whose title is "Home Trackpad") of menu of bt
    click
    tell menu 1
      if exists menu item "Connect"
        click menu item "Connect"
        return "Connecting..."
      else
        click bt  -- close main dropdown to clean up after ourselves
        return "No connect button; is it already connected?"
      end if
    end tell
  end tell
end tell

2
blued listall

Lệnh Terminal này sẽ cho bạn biết tất cả các thiết bị hiện được biết đến. Bạn sẽ phải tìm ra (bằng cách đọc giữa các dòng) cái nào (giả sử bạn đã đặt tên cho bàn di chuột của mình một cái gì đó "đẹp", như "nhà" hoặc "công việc", v.v.)

Tôi đã làm điều này và nhận được:

2016-05-03 20:14:58.392 blued[3852:507] hostControllerOnline - Number of Paired devices = 3, List of Paired devices = (
    "d8-96-95-e0-3e-f8",
    "c4-2c-03-b7-87-57",
    "90-84-0d-e4-7b-41"
)
link key found for device: c4-2c-03-b7-87-57
2016-05-03 20:15:04.637 blued[3852:507] link key found for device: c4-2c-03-b7-87-57
2016-05-03 20:15:04.639 blued[3852:507] [setSystemPreference] syncs returns false
2016-05-03 20:15:04.639 blued[3852:507] Save link key for device: c4-2c-03-b7-87-57
link key found for device: 90-84-0d-e4-7b-41
2016-05-03 20:15:04.640 blued[3852:507] link key found for device: 90-84-0d-e4-7b-41
2016-05-03 20:15:04.640 blued[3852:507] Save link key for device: 90-84-0d-e4-7b-41
link key found for device: d8-96-95-e0-3e-f8
2016-05-03 20:15:04.640 blued[3852:507] link key found for device: d8-96-95-e0-3e-f8
2016-05-03 20:15:04.641 blued[3852:507] Save link key for device: d8-96-95-e0-3e-f8 
Create connection failed (0x4) for device: D8-96-95-E0-3E-F8

(sau đó tôi nhấn "ctrl-c" để hủy bỏ)

Giả sử rằng tôi biết rằng "c4-2c-03-b7-87-57" là 'nhà' ....

kế tiếp:

blued join c4-2c-03-b7-87-57

Điều này hoạt động trên hệ thống của tôi (10.9.5). YMMV.

Bạn cũng có thể phải thêm chức năng tiêu diệt, vì có vẻ như nó bluedkhông 'nói chuyện' tốt với Terminal.

Vì vậy, có lẽ một lệnh shell có thể sẽ là:

blued join c4-2c-03-b7-87-57
killall terminal

Cảm ơn! Đây chính xác là những gì tôi cần. Nhanh hơn nhiều so với thực hiện với applescript và không cần nhập mật khẩu sudo. Thay vì killalltôi chỉ cần nhấn ctrl + c lần nữa
nachocab

Tôi nghĩ rằng tôi đã nói quá sớm. Lệnh của bạn cho phép kết nối và ngắt kết nối lệnh bluetooth được bật lần cuối, nhưng việc thay đổi từ lỗi này sang lệnh khác không thành công với lỗi này:Create connection failed (0x4) for device: 7C-C3-A1-4D-CF-99
nachocab
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.