**Is your feature request related to a problem? Please describe.**
The clipboard module depends on the remote module on Linux.

**Describe the solution you'd like**
It should be implemented using dedicated IPCs that are properly validated to avoid security issues.

**Describe alternatives you've considered**
The app can call the clipboard APIs in the main process in response to app-level IPCs from the renderer.

**Additional context**
Follow-up from https://github.com/electron/electron/pull/13028

atom/common/api/atom_api_native_image.cc
mate::Arguments* args,
    v8::Local<v8::Value> buffer,
    const mate::Dictionary& options) {
  if (!node::Buffer::HasInstance(buffer)) {
    args->ThrowError("buffer must be a node Buffer");
    return mate::Handle<NativeImage>();
  }
  unsigned int width = 0;
  unsigned int height = 0;
  double scale_factor = 1.;
  if (!options.Get("width", &width)) {
    args->ThrowError("width is required");
    return mate::Handle<NativeImage>();
  }
  if (!options.Get("height", &height)) {
    args->ThrowError("height is required");
    return mate::Handle<NativeImage>();
  }
  auto info = SkImageInfo::MakeN32(width, height, kPremul_SkAlphaType);
  auto size_bytes = info.computeMinByteSize();
  if (size_bytes != node::Buffer::Length(buffer)) {
    args->ThrowError("invalid buffer size");
    return mate::Handle<NativeImage>();
  }
  options.Get("scaleFactor", &scale_factor);
  if (width == 0 || height == 0) {
    return CreateEmpty(args->isolate());
  }
  SkBitmap bitmap;
  bitmap.allocN32Pixels(width, height, false);